<?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>164753</bug_id>
          
          <creation_ts>2016-11-14 17:14:13 -0800</creation_ts>
          <short_desc>[JSC] do not reference AwaitExpression Promises in async function Promise chain</short_desc>
          <delta_ts>2016-11-14 20:28:53 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Caitlin Potter (:caitp)">caitp</reporter>
          <assigned_to name="Caitlin Potter (:caitp)">caitp</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1251267</commentid>
    <comment_count>0</comment_count>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2016-11-14 17:14:13 -0800</bug_when>
    <thetext>[JSC] do not reference AwaitExpression Promises in async function Promise chain</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251270</commentid>
    <comment_count>1</comment_count>
      <attachid>294781</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2016-11-14 17:15:07 -0800</bug_when>
    <thetext>Created attachment 294781
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251274</commentid>
    <comment_count>2</comment_count>
      <attachid>294781</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2016-11-14 17:20:23 -0800</bug_when>
    <thetext>Comment on attachment 294781
Patch

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

&gt; Source/JavaScriptCore/builtins/AsyncFunctionPrototype.js:40
&gt; +        value = generator.@generatorNext.@call(generator.@generatorThis, generator, @GeneratorStateExecuting, @undefined, @GeneratorResumeModeNormal, generator.@generatorFrame);

It might make sense to make this a part of the wrapper function&apos;s bytecode, but I&apos;m not entirely sure how to allocate the closures on lines 53 and 54 with the right captured variables. What do you think?

&gt; JSTests/stress/async-await-throw-loop.js:5
&gt; +// TODO: @runFTLNoCJIT(&quot;--gcMaxHeapSize=2000000&quot;)

TODO: runNoCJIT()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251295</commentid>
    <comment_count>3</comment_count>
      <attachid>294781</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-14 17:48:26 -0800</bug_when>
    <thetext>Comment on attachment 294781
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:7
&gt; +

Please write detailed comments on ChangeLog. It&apos;s super useful when we understand / debug related things :)

&gt; Source/JavaScriptCore/builtins/AsyncFunctionPrototype.js:32
&gt; +        @throwTypeError(&quot;Async function illegally spawned&quot;);

Could you add a test to ensure this error is raised in some situation correctly?

&gt;&gt; Source/JavaScriptCore/builtins/AsyncFunctionPrototype.js:40
&gt;&gt; +        value = generator.@generatorNext.@call(generator.@generatorThis, generator, @GeneratorStateExecuting, @undefined, @GeneratorResumeModeNormal, generator.@generatorFrame);
&gt; 
&gt; It might make sense to make this a part of the wrapper function&apos;s bytecode, but I&apos;m not entirely sure how to allocate the closures on lines 53 and 54 with the right captured variables. What do you think?

If we can merge @asyncFunctionResume and @asyncFunctionSpawn, we do not need to emit code in the wrapper function side I think.

&gt; Source/JavaScriptCore/builtins/AsyncFunctionPrototype.js:54
&gt; +        function(value) { @asyncFunctionResume(generator, promiseCapability, value, @GeneratorResumeModeNormal); },
&gt; +        function(error) { @asyncFunctionResume(generator, promiseCapability, error, @GeneratorResumeModeThrow); });

In both functions, we do not return the result of the function here. So I think we do not need to have 2 functions, right?
I think we just use `@asyncFunctionResume`. Create the result promise capability in the async function itself and pass it to @asyncFunctionResume can drop @asyncFunctionSpawn.

&gt; Source/JavaScriptCore/builtins/AsyncFunctionPrototype.js:75
&gt; +            return;

Let&apos;s return promiseCapability.@promise as similar to @asyncFunctionSpawn.

&gt; Source/JavaScriptCore/builtins/AsyncFunctionPrototype.js:80
&gt; +        return;

Let&apos;s return promiseCapability.@promise as similar to @asyncFunctionSpawn.

&gt; Source/JavaScriptCore/builtins/AsyncFunctionPrototype.js:85
&gt; +        function(error) { @asyncFunctionResume(generator, promiseCapability, error, @GeneratorResumeModeThrow); });

Let&apos;s return promiseCapability.@promise as similar to @asyncFunctionSpawn.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:3468
&gt;  

You can create the result promise capability here.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:3471
&gt; +        auto var = generator.variable(generator.propertyNames().builtinNames().asyncFunctionSpawnPrivateName());

And use @asyncFunctionResume instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251326</commentid>
    <comment_count>4</comment_count>
      <attachid>294798</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2016-11-14 19:40:05 -0800</bug_when>
    <thetext>Created attachment 294798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251327</commentid>
    <comment_count>5</comment_count>
      <attachid>294799</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2016-11-14 19:42:05 -0800</bug_when>
    <thetext>Created attachment 294799
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251328</commentid>
    <comment_count>6</comment_count>
      <attachid>294781</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2016-11-14 19:43:39 -0800</bug_when>
    <thetext>Comment on attachment 294781
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:7
&gt;&gt; +
&gt; 
&gt; Please write detailed comments on ChangeLog. It&apos;s super useful when we understand / debug related things :)

added a bit more

&gt;&gt; Source/JavaScriptCore/builtins/AsyncFunctionPrototype.js:32
&gt;&gt; +        @throwTypeError(&quot;Async function illegally spawned&quot;);
&gt; 
&gt; Could you add a test to ensure this error is raised in some situation correctly?

There should not be any observable code that can run into this. It&apos;s more like an assertion than anything else. Same as the one in @asyncFunctionResume

&gt;&gt; Source/JavaScriptCore/builtins/AsyncFunctionPrototype.js:54
&gt;&gt; +        function(error) { @asyncFunctionResume(generator, promiseCapability, error, @GeneratorResumeModeThrow); });
&gt; 
&gt; In both functions, we do not return the result of the function here. So I think we do not need to have 2 functions, right?
&gt; I think we just use `@asyncFunctionResume`. Create the result promise capability in the async function itself and pass it to @asyncFunctionResume can drop @asyncFunctionSpawn.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251333</commentid>
    <comment_count>7</comment_count>
      <attachid>294799</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-14 20:04:34 -0800</bug_when>
    <thetext>Comment on attachment 294799
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251341</commentid>
    <comment_count>8</comment_count>
      <attachid>294799</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-14 20:28:48 -0800</bug_when>
    <thetext>Comment on attachment 294799
Patch

Clearing flags on attachment: 294799

Committed r208726: &lt;http://trac.webkit.org/changeset/208726&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251342</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-14 20:28:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294781</attachid>
            <date>2016-11-14 17:15:07 -0800</date>
            <delta_ts>2016-11-14 19:40:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164753-20161114201506.patch</filename>
            <type>text/plain</type>
            <size>9276</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MDcwMTdhZDA3N2U3Mjk1OTUwYWE0N2YxMTM1Y2M5NWMzMmRkNjkyLi40NDI0YjIyOTc1ODk2NGU1
MDY2MGI4MDEzZDAwODRkNTI3YzUzZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNi0xMS0xNCAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIGRvIG5vdCByZWZlcmVuY2UgQXdhaXRFeHByZXNzaW9uIFByb21p
c2VzIGluIGFzeW5jIGZ1bmN0aW9uIFByb21pc2UgY2hhaW4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDc1MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYnVpbHRpbnMvQXN5bmNGdW5jdGlvblByb3Rv
dHlwZS5qczoKKyAgICAgICAgKGdsb2JhbFByaXZhdGUuYXN5bmNGdW5jdGlvblNwYXduKToKKyAg
ICAgICAgKGdsb2JhbFByaXZhdGUuYXN5bmNGdW5jdGlvblJlc3VtZSk6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uTm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKwogMjAxNi0xMS0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgV2FzbSBzZWxlY3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmpzIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuanMKaW5k
ZXggZWE5MGVmNGQ0MzhlYTZmOTExZWExOWE5MTViNGI4ZjQ3ZjQ1NmNiNi4uY2JkYTQxZTVhNDVi
NDJlOTI4YzQ5OGFlMTVkYTk3YTM4Mzg0ZTMwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuanMKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuanMKQEAgLTI0LDcg
KzI0LDQwIEBACiAgKi8KIAogQGdsb2JhbFByaXZhdGUKLWZ1bmN0aW9uIGFzeW5jRnVuY3Rpb25S
ZXN1bWUoZ2VuZXJhdG9yLCBzZW50VmFsdWUsIHJlc3VtZU1vZGUpCitmdW5jdGlvbiBhc3luY0Z1
bmN0aW9uU3Bhd24oZ2VuZXJhdG9yKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmIChn
ZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID09PSBAR2VuZXJhdG9yU3RhdGVDb21wbGV0ZWQpCisg
ICAgICAgIEB0aHJvd1R5cGVFcnJvcigiQXN5bmMgZnVuY3Rpb24gaWxsZWdhbGx5IHNwYXduZWQi
KTsKKworICAgIGxldCBwcm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShA
UHJvbWlzZSk7CisgICAgbGV0IHByb21pc2UgPSBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTsK
KyAgICBsZXQgdmFsdWU7CisKKyAgICB0cnkgeworICAgICAgICBnZW5lcmF0b3IuQGdlbmVyYXRv
clN0YXRlID0gQEdlbmVyYXRvclN0YXRlRXhlY3V0aW5nOworICAgICAgICB2YWx1ZSA9IGdlbmVy
YXRvci5AZ2VuZXJhdG9yTmV4dC5AY2FsbChnZW5lcmF0b3IuQGdlbmVyYXRvclRoaXMsIGdlbmVy
YXRvciwgQEdlbmVyYXRvclN0YXRlRXhlY3V0aW5nLCBAdW5kZWZpbmVkLCBAR2VuZXJhdG9yUmVz
dW1lTW9kZU5vcm1hbCwgZ2VuZXJhdG9yLkBnZW5lcmF0b3JGcmFtZSk7CisgICAgICAgIGlmIChn
ZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlID09PSBAR2VuZXJhdG9yU3RhdGVFeGVjdXRpbmcpIHsK
KyAgICAgICAgICAgIGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUgPSBAR2VuZXJhdG9yU3RhdGVD
b21wbGV0ZWQ7CisgICAgICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSh2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGVy
cm9yKSB7CisgICAgICAgIGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUgPSBAR2VuZXJhdG9yU3Rh
dGVDb21wbGV0ZWQ7CisgICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QoZXJyb3IpOwor
ICAgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICB9CisKKyAgICBAUHJvbWlzZS5AcmVzb2x2ZSh2
YWx1ZSkuQHRoZW4oCisgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7IEBhc3luY0Z1bmN0aW9uUmVz
dW1lKGdlbmVyYXRvciwgcHJvbWlzZUNhcGFiaWxpdHksIHZhbHVlLCBAR2VuZXJhdG9yUmVzdW1l
TW9kZU5vcm1hbCk7IH0sCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IEBhc3luY0Z1bmN0aW9u
UmVzdW1lKGdlbmVyYXRvciwgcHJvbWlzZUNhcGFiaWxpdHksIGVycm9yLCBAR2VuZXJhdG9yUmVz
dW1lTW9kZVRocm93KTsgfSk7CisKKyAgICByZXR1cm4gcHJvbWlzZTsKK30KKworQGdsb2JhbFBy
aXZhdGUKK2Z1bmN0aW9uIGFzeW5jRnVuY3Rpb25SZXN1bWUoZ2VuZXJhdG9yLCBwcm9taXNlQ2Fw
YWJpbGl0eSwgc2VudFZhbHVlLCByZXN1bWVNb2RlKQogewogICAgICJ1c2Ugc3RyaWN0IjsKICAg
ICBsZXQgc3RhdGUgPSBnZW5lcmF0b3IuQGdlbmVyYXRvclN0YXRlOwpAQCAtMzgsMTQgKzcxLDE2
IEBAIGZ1bmN0aW9uIGFzeW5jRnVuY3Rpb25SZXN1bWUoZ2VuZXJhdG9yLCBzZW50VmFsdWUsIHJl
c3VtZU1vZGUpCiAgICAgICAgIHZhbHVlID0gZ2VuZXJhdG9yLkBnZW5lcmF0b3JOZXh0LkBjYWxs
KGdlbmVyYXRvci5AZ2VuZXJhdG9yVGhpcywgZ2VuZXJhdG9yLCBzdGF0ZSwgc2VudFZhbHVlLCBy
ZXN1bWVNb2RlLCBnZW5lcmF0b3IuQGdlbmVyYXRvckZyYW1lKTsKICAgICAgICAgaWYgKGdlbmVy
YXRvci5AZ2VuZXJhdG9yU3RhdGUgPT09IEBHZW5lcmF0b3JTdGF0ZUV4ZWN1dGluZykgewogICAg
ICAgICAgICAgZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZSA9IEBHZW5lcmF0b3JTdGF0ZUNvbXBs
ZXRlZDsKLSAgICAgICAgICAgIHJldHVybiBAUHJvbWlzZS5AcmVzb2x2ZSh2YWx1ZSk7CisgICAg
ICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSh2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICBnZW5lcmF0
b3IuQGdlbmVyYXRvclN0YXRlID0gQEdlbmVyYXRvclN0YXRlQ29tcGxldGVkOwotICAgICAgICBy
ZXR1cm4gQFByb21pc2UuQHJlamVjdChlcnJvcik7CisgICAgICAgIHByb21pc2VDYXBhYmlsaXR5
LkByZWplY3QoZXJyb3IpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmV0dXJuIEBQ
cm9taXNlLkByZXNvbHZlKHZhbHVlKS5AdGhlbigKLSAgICAgICAgZnVuY3Rpb24odmFsdWUpIHsg
cmV0dXJuIEBhc3luY0Z1bmN0aW9uUmVzdW1lKGdlbmVyYXRvciwgdmFsdWUsIEBHZW5lcmF0b3JS
ZXN1bWVNb2RlTm9ybWFsKTsgfSwKLSAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgcmV0dXJuIEBh
c3luY0Z1bmN0aW9uUmVzdW1lKGdlbmVyYXRvciwgZXJyb3IsIEBHZW5lcmF0b3JSZXN1bWVNb2Rl
VGhyb3cpOyB9KTsKKyAgICBAUHJvbWlzZS5AcmVzb2x2ZSh2YWx1ZSkuQHRoZW4oCisgICAgICAg
IGZ1bmN0aW9uKHZhbHVlKSB7IEBhc3luY0Z1bmN0aW9uUmVzdW1lKGdlbmVyYXRvciwgcHJvbWlz
ZUNhcGFiaWxpdHksIHZhbHVlLCBAR2VuZXJhdG9yUmVzdW1lTW9kZU5vcm1hbCk7IH0sCisgICAg
ICAgIGZ1bmN0aW9uKGVycm9yKSB7IEBhc3luY0Z1bmN0aW9uUmVzdW1lKGdlbmVyYXRvciwgcHJv
bWlzZUNhcGFiaWxpdHksIGVycm9yLCBAR2VuZXJhdG9yUmVzdW1lTW9kZVRocm93KTsgfSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAKaW5kZXggZDM1OTVjZjlhOTIwMzYzYWY0YzM1OWYzZjgyOGJiMGMxZGYzZTliYS4uNmIx
ZGNlNDVmOGEzNmQxMjU2YzA5OGQ0NDM3MzUxZjQ1Njc2NDBjYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMzQ2Niwy
MSArMzQ2NiwyMCBAQCB2b2lkIEZ1bmN0aW9uTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogICAgICAgICBBU1NFUlQoc3RhcnRPZmZz
ZXQoKSA+PSBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0RGVidWdI
b29rKFdpbGxMZWF2ZUNhbGxGcmFtZSwgbGFzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0
YXJ0T2Zmc2V0KCkpOwogCi0gICAgICAgIC8vIGxvYWQgQGFzeW5jRnVuY3Rpb25SZXN1bWUsIGFu
ZCBjYWxsLgorICAgICAgICAvLyBsb2FkIEBhc3luY0Z1bmN0aW9uU3Bhd24sIGFuZCBjYWxsLgog
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3RhcnRBc3luY0Z1bmN0aW9uID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBhdXRvIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShn
ZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFzeW5jRnVuY3Rpb25SZXN1
bWVQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgYXV0byB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUo
Z2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5hc3luY0Z1bmN0aW9uU3Bh
d25Qcml2YXRlTmFtZSgpKTsKIAogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5h
dGlvbklmTmVlZGVkKHNjb3BlLmdldCgpLCBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShzY29w
ZS5nZXQoKSwgdmFyKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKHN0YXJ0
QXN5bmNGdW5jdGlvbi5nZXQoKSwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsK
IAotICAgICAgICAvLyByZXR1cm4gQGFzeW5jRnVuY3Rpb25SZXN1bWUuQGNhbGwodGhpcywgQGdl
bmVyYXRvciwgQHVuZGVmaW5lZCwgR2VuZXJhdG9yUmVzdW1lTW9kZTo6Tm9ybWFsTW9kZSkKLSAg
ICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKGdlbmVyYXRvciwgbnVsbHB0ciwgMyk7CisgICAgICAg
IC8vIHJldHVybiBAYXN5bmNGdW5jdGlvblNwYXduLkBjYWxsKHRoaXMsIEBnZW5lcmF0b3IpCisg
ICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIsIDEpOwogICAgICAg
ICB1bnNpZ25lZCBhcmd1bWVudENvdW50ID0gMDsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2Fk
KGFyZ3MudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdE1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKGFyZ3VtZW50Q291bnQrKyksIGdlbmVyYXRv
ci5nZW5lcmF0b3JSZWdpc3RlcigpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGFyZ3Mu
YXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudENvdW50KyspLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGFyZ3MuYXJndW1lbnRSZWdpc3Rlcihhcmd1bWVudENvdW50
KyspLCBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihKU0dlbmVyYXRvckZ1bmN0aW9uOjpH
ZW5lcmF0b3JSZXN1bWVNb2RlOjpOb3JtYWxNb2RlKSkpOworCiAgICAgICAgIC8vIEpTVGV4dFBv
c2l0aW9uKGludCBfbGluZSwgaW50IF9vZmZzZXQsIGludCBfbGluZVN0YXJ0T2Zmc2V0KQogICAg
ICAgICBKU1RleHRQb3NpdGlvbiBkaXZvdChmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGlu
ZVN0YXJ0T2Zmc2V0KCkpOwogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDJhNGFhZjM5YzZlODRiNGUwYWZiZjZkMjJiYjA2OTc4NmI5NzRk
NDUuLjcxMmYyNDllYTdkYTcxMTUxOGRiNDYxMDY2ODc5NzIyNDY5MWE3MTYgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTYtMTEtMTQgIENhaXRsaW4gUG90dGVyICA8Y2FpdHBAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbSlNDXSBkbyBub3QgcmVmZXJlbmNlIEF3YWl0RXhwcmVzc2lvbiBQcm9taXNlcyBpbiBh
c3luYyBmdW5jdGlvbiBQcm9taXNlIGNoYWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ3NTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGFzeW5jRnVuY3Rpb25UZXN0cy55YW1sOgorICAgICAgICAq
IHN0cmVzcy9hc3luYy1hd2FpdC1sb25nLWxvb3AuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVz
cy9hc3luYy1hd2FpdC10aHJvdy1sb29wLmpzOiBBZGRlZC4KKwogMjAxNi0xMS0xNCAgS2VpdGgg
TWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgV2FzbSBzZWxl
Y3QKZGlmZiAtLWdpdCBhL0pTVGVzdHMvYXN5bmNGdW5jdGlvblRlc3RzLnlhbWwgYi9KU1Rlc3Rz
L2FzeW5jRnVuY3Rpb25UZXN0cy55YW1sCmluZGV4IDFlMzhiZmI5Y2M0ZDJlYWU4ZDFhYjg4ZmQw
ZDJiNzUwNTdlZWYzMzMuLjUwNzZkZDVhNGVkYjBjZjkxZmYyMmIxNjYxNWRjMmY5ODljNmI5MWUg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvYXN5bmNGdW5jdGlvblRlc3RzLnlhbWwKKysrIGIvSlNUZXN0
cy9hc3luY0Z1bmN0aW9uVGVzdHMueWFtbApAQCAtNDMsNiArNDMsMTAgQEAKICAgY21kOiBydW5E
ZWZhdWx0CiAtIHBhdGg6IHN0cmVzcy9hc3luYy1hd2FpdC1yZXNlcnZlZC13b3JkLmpzCiAgIGNt
ZDogcnVuRGVmYXVsdAorLSBwYXRoOiBzdHJlc3MvYXN5bmMtYXdhaXQtbG9uZy1sb29wLmpzCisg
IGNtZDogcnVuTm9DSklUICItLWdjTWF4SGVhcFNpemU9MjAwMDAwMCIKKy0gcGF0aDogc3RyZXNz
L2FzeW5jLWF3YWl0LXRocm93LWxvb3AuanMKKyAgY21kOiBydW5Ob0NKSVQgIi0tZ2NNYXhIZWFw
U2l6ZT0yMDAwMDAwIgogCiAjIEZUTEpJVAogLSBwYXRoOiBzdHJlc3MvYXN5bmMtZnVuY3Rpb24t
Y3JlYXRlLW9wdGltaXplZC5qcwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXN5bmMtYXdh
aXQtbG9uZy1sb29wLmpzIGIvSlNUZXN0cy9zdHJlc3MvYXN5bmMtYXdhaXQtbG9uZy1sb29wLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM0MTIzNGRkODRkZWE3M2VlN2NkMzc4ZjJjYzBmOTZjM2QyZDcyNGEKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC1sb25nLWxvb3AuanMK
QEAgLTAsMCArMSwyOCBAQAorLy8gQ29weXJpZ2h0IChDKSBDb3B5cmlnaHQgMjAxNiB0aGUgdjgg
cHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisvLyBUaGlzIHRlc3QgcmVx
dWlyZXMgRU5BQkxFX0VTMjAxN19BU1lOQ0ZVTkNUSU9OX1NZTlRBWCB0byBiZSBlbmFibGVkIGF0
IGJ1aWxkIHRpbWUuCisvL0Agc2tpcAorLy8gVE9ETzogQHJ1bkZUTE5vQ0pJVCgiLS1nY01heEhl
YXBTaXplPTIwMDAwMDAiKQorCisKK2Z1bmN0aW9uIHNob3VsZEJlKGV4cGVjdGVkLCBhY3R1YWws
IG1zZyA9ICIiKSB7CisgICAgaWYgKG1zZykKKyAgICAgICAgbXNnID0gIiBmb3IgIiArIG1zZzsK
KyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJi
YWQgdmFsdWUiICsgbXNnICsgIjogIiArIGFjdHVhbCArICIuIEV4cGVjdGVkICIgKyBleHBlY3Rl
ZCk7Cit9CisKKworbGV0IG91dDsKKworYXN5bmMgZnVuY3Rpb24gbG9uZ0xvb3AoKSB7CisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQorICAgICAgICBhd2FpdCB1bmRlZmluZWQ7
CisgICAgb3V0ID0gMTsKK30KKworbG9uZ0xvb3AoKTsKKworZHJhaW5NaWNyb3Rhc2tzKCk7CisK
K3Nob3VsZEJlKG91dCwgMSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2Fp
dC10aHJvdy1sb29wLmpzIGIvSlNUZXN0cy9zdHJlc3MvYXN5bmMtYXdhaXQtdGhyb3ctbG9vcC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42NzcyMmMyNTNmMzBjZWIwOGRkZDg5Nzc2ZTQ3NjY0MTkzNjQyYzZmCi0t
LSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXN5bmMtYXdhaXQtdGhyb3ctbG9vcC5q
cwpAQCAtMCwwICsxLDM0IEBACisvLyBDb3B5cmlnaHQgKEMpIENvcHlyaWdodCAyMDE2IHRoZSB2
OCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKy8vIFRoaXMgdGVzdCBy
ZXF1aXJlcyBFTkFCTEVfRVMyMDE3X0FTWU5DRlVOQ1RJT05fU1lOVEFYIHRvIGJlIGVuYWJsZWQg
YXQgYnVpbGQgdGltZS4KKy8vQCBza2lwCisvLyBUT0RPOiBAcnVuRlRMTm9DSklUKCItLWdjTWF4
SGVhcFNpemU9MjAwMDAwMCIpCisKK2Z1bmN0aW9uIHNob3VsZEJlKGV4cGVjdGVkLCBhY3R1YWws
IG1zZyA9ICIiKSB7CisgICAgaWYgKG1zZykKKyAgICAgICAgbXNnID0gIiBmb3IgIiArIG1zZzsK
KyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJi
YWQgdmFsdWUiICsgbXNnICsgIjogIiArIGFjdHVhbCArICIuIEV4cGVjdGVkICIgKyBleHBlY3Rl
ZCk7Cit9CisKKworbGV0IG91dDsKKworYXN5bmMgZnVuY3Rpb24gdGhyb3dlcigpIHsgdGhyb3cg
dW5kZWZpbmVkOyB9CisKK2FzeW5jIGZ1bmN0aW9uIHRocm93TG9vcCgpIHsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDgwMDA7IGkrKykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgYXdh
aXQgdGhyb3dlcigpOworICAgICAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAgdm9p
ZCAwOworICAgICAgICB9CisgICAgfQorICAgIG91dCA9IDI7Cit9CisKK3Rocm93TG9vcCgpOwor
CitkcmFpbk1pY3JvdGFza3MoKTsKKworc2hvdWxkQmUob3V0LCAyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294798</attachid>
            <date>2016-11-14 19:40:05 -0800</date>
            <delta_ts>2016-11-14 19:42:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164753-20161114224004.patch</filename>
            <type>text/plain</type>
            <size>15086</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MDcwMTdhZDA3N2U3Mjk1OTUwYWE0N2YxMTM1Y2M5NWMzMmRkNjkyLi45NDRjZjFhYzRkOGFhYTUw
NmVjMTU0N2FmMmM2MTEwZTY5YzMxMDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNi0xMS0xNCAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIGRvIG5vdCByZWZlcmVuY2UgQXdhaXRFeHByZXNzaW9uIFByb21p
c2VzIGluIGFzeW5jIGZ1bmN0aW9uIFByb21pc2UgY2hhaW4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDc1MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIGxvbmctcnVubmluZyBhc3lu
YyBmdW5jdGlvbnMgd2hpY2ggY29udGFpbmVkIG1hbnkgQXdhaXRFeHByZXNzaW9ucworICAgICAg
ICB3b3VsZCBhbGxvY2F0ZSBhbmQgcmV0YWluIHJlZmVyZW5jZXMgdG8gaW50ZXJtZWRpYXRlIFBy
b21pc2Ugb2JqZWN0cyBmb3IgZWFjaCBgYXdhaXRgLAorICAgICAgICByZXN1bHRpbmcgaW4gYSBt
ZW1vcnkgbGVhay4KKworICAgICAgICBUbyBtaXRpZ2F0ZSB0aGlzIGxlYWssIGEgcmVmZXJlbmNl
IHRvIHRoZSBvcmlnaW5hbCBQcm9taXNlIChhbmQgaXRzIHJlc29sdmUgYW5kIHJlamVjdAorICAg
ICAgICBmdW5jdGlvbnMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXN5bmMgZnVuY3Rpb24gYXJlIGtl
cHQsIGFuZCBwYXNzZWQgdG8gZWFjaCBjYWxsIHRvCisgICAgICAgIEBhc3luY0Z1bmN0aW9uUmVz
dW1lLCB3aGlsZSBpbnRlcm1lZGlhdGUgUHJvbWlzZXMgYXJlIGRpc2NhcmRlZC4gVGhpcyBpcyBk
b25lIGJ5IGFkZGluZworICAgICAgICBhIG5ldyBSZWdpc3RlciB0byB0aGUgQnl0ZWNvZGVHZW5l
cmF0b3IgdG8gaG9sZCB0aGUgUHJvbWlzZUNhcGFiaWxpdHkgb2JqZWN0IGFzc29jaWF0ZWQKKyAg
ICAgICAgd2l0aCBhbiBhc3luYyBmdW5jdGlvbiB3cmFwcGVyLiBUaGUgY2FwYWJpbGl0eSBpcyB1
c2VkIHRvIHJlamVjdCB0aGUgUHJvbWlzZSBpZiBhbgorICAgICAgICBleGNlcHRpb24gaXMgdGhy
b3duIGR1cmluZyBwYXJhbWV0ZXIgaW5pdGlhbGl6YXRpb24sIGFuZCBpcyB1c2VkIHRvIHN0b3Jl
IHRoZSByZXN1bHRpbmcKKyAgICAgICAgdmFsdWUgb25jZSB0aGUgYXN5bmMgZnVuY3Rpb24gaGFz
IHRlcm1pbmF0ZWQuCisKKyAgICAgICAgKiBidWlsdGlucy9Bc3luY0Z1bmN0aW9uUHJvdG90eXBl
LmpzOgorICAgICAgICAoZ2xvYmFsUHJpdmF0ZS5hc3luY0Z1bmN0aW9uUmVzdW1lKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAqIGJ5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6cHJvbWlzZUNhcGFiaWxpdHlSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uTm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKwogMjAxNi0xMS0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgV2FzbSBzZWxlY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuanMKaW5kZXggZWE5MGVmNGQ0
MzhlYTZmOTExZWExOWE5MTViNGI4ZjQ3ZjQ1NmNiNi4uOGQ0MDM2N2I5YzllZDE1ZTkzNTgxNDc2
MDQzZGU5NjE0NGE3NGNiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuanMKQEAgLTI0LDcgKzI0LDcgQEAKICAq
LwogCiBAZ2xvYmFsUHJpdmF0ZQotZnVuY3Rpb24gYXN5bmNGdW5jdGlvblJlc3VtZShnZW5lcmF0
b3IsIHNlbnRWYWx1ZSwgcmVzdW1lTW9kZSkKK2Z1bmN0aW9uIGFzeW5jRnVuY3Rpb25SZXN1bWUo
Z2VuZXJhdG9yLCBwcm9taXNlQ2FwYWJpbGl0eSwgc2VudFZhbHVlLCByZXN1bWVNb2RlKQogewog
ICAgICJ1c2Ugc3RyaWN0IjsKICAgICBsZXQgc3RhdGUgPSBnZW5lcmF0b3IuQGdlbmVyYXRvclN0
YXRlOwpAQCAtMzgsMTQgKzM4LDE4IEBAIGZ1bmN0aW9uIGFzeW5jRnVuY3Rpb25SZXN1bWUoZ2Vu
ZXJhdG9yLCBzZW50VmFsdWUsIHJlc3VtZU1vZGUpCiAgICAgICAgIHZhbHVlID0gZ2VuZXJhdG9y
LkBnZW5lcmF0b3JOZXh0LkBjYWxsKGdlbmVyYXRvci5AZ2VuZXJhdG9yVGhpcywgZ2VuZXJhdG9y
LCBzdGF0ZSwgc2VudFZhbHVlLCByZXN1bWVNb2RlLCBnZW5lcmF0b3IuQGdlbmVyYXRvckZyYW1l
KTsKICAgICAgICAgaWYgKGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUgPT09IEBHZW5lcmF0b3JT
dGF0ZUV4ZWN1dGluZykgewogICAgICAgICAgICAgZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZSA9
IEBHZW5lcmF0b3JTdGF0ZUNvbXBsZXRlZDsKLSAgICAgICAgICAgIHJldHVybiBAUHJvbWlzZS5A
cmVzb2x2ZSh2YWx1ZSk7CisgICAgICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSh2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7CiAg
ICAgICAgIH0KICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICBnZW5lcmF0b3IuQGdlbmVy
YXRvclN0YXRlID0gQEdlbmVyYXRvclN0YXRlQ29tcGxldGVkOwotICAgICAgICByZXR1cm4gQFBy
b21pc2UuQHJlamVjdChlcnJvcik7CisgICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3Qo
ZXJyb3IpOworICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7CiAgICAg
fQogCi0gICAgcmV0dXJuIEBQcm9taXNlLkByZXNvbHZlKHZhbHVlKS5AdGhlbigKLSAgICAgICAg
ZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIEBhc3luY0Z1bmN0aW9uUmVzdW1lKGdlbmVyYXRvciwg
dmFsdWUsIEBHZW5lcmF0b3JSZXN1bWVNb2RlTm9ybWFsKTsgfSwKLSAgICAgICAgZnVuY3Rpb24o
ZXJyb3IpIHsgcmV0dXJuIEBhc3luY0Z1bmN0aW9uUmVzdW1lKGdlbmVyYXRvciwgZXJyb3IsIEBH
ZW5lcmF0b3JSZXN1bWVNb2RlVGhyb3cpOyB9KTsKKyAgICBAUHJvbWlzZS5AcmVzb2x2ZSh2YWx1
ZSkuQHRoZW4oCisgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7IEBhc3luY0Z1bmN0aW9uUmVzdW1l
KGdlbmVyYXRvciwgcHJvbWlzZUNhcGFiaWxpdHksIHZhbHVlLCBAR2VuZXJhdG9yUmVzdW1lTW9k
ZU5vcm1hbCk7IH0sCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IEBhc3luY0Z1bmN0aW9uUmVz
dW1lKGdlbmVyYXRvciwgcHJvbWlzZUNhcGFiaWxpdHksIGVycm9yLCBAR2VuZXJhdG9yUmVzdW1l
TW9kZVRocm93KTsgfSk7CisKKyAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDY5YjI1MzlkNmFhODUwNTBlMDkyZWIyMzVhZjU4ZDQy
ZTk3YTVkYTYuLjdmMGUzMTM3NTVmMjRkOWNlZmZkMGM3OWE2MzVkYTY3NTU4MDk2ZWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCkBAIC01NjIsNiArNTYyLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UK
ICAgICAgICAgQVNTRVJUKCFpc0NvbnN0cnVjdG9yKCkpOwogICAgICAgICBBU1NFUlQoY29uc3Ry
dWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpOb25lKTsKICAgICAgICAgbV9nZW5lcmF0
b3JSZWdpc3RlciA9IGFkZFZhcigpOworICAgICAgICBtX3Byb21pc2VDYXBhYmlsaXR5UmVnaXN0
ZXIgPSBhZGRWYXIoKTsKIAogICAgICAgICBpZiAocGFyc2VNb2RlICE9IFNvdXJjZVBhcnNlTW9k
ZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IEVtaXQg
dG9fdGhpcyBvbmx5IHdoZW4gQXN5bmNGdW5jdGlvbkJvZHkgdXNlcyBpdC4KQEAgLTU3NCw2ICs1
NzUsMjMgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVu
Y3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAgICAgICAgfQogCiAgICAgICAgIGVt
aXROZXdPYmplY3QobV9nZW5lcmF0b3JSZWdpc3Rlcik7CisKKyAgICAgICAgLy8gbGV0IHByb21p
c2VDYXBhYmlsaXR5IGJlIEBuZXdQcm9taXNlQ2FwYWJpbGl0eShAUHJvbWlzZSkKKyAgICAgICAg
YXV0byB2YXJOZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHZhcmlhYmxlKHByb3BlcnR5TmFtZXMoKS5i
dWlsdGluTmFtZXMoKS5uZXdQcm9taXNlQ2FwYWJpbGl0eVByaXZhdGVOYW1lKCkpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgbW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChzY29wZS5nZXQoKSwgZW1pdFJlc29sdmVTY29wZShzY29w
ZS5nZXQoKSwgdmFyTmV3UHJvbWlzZUNhcGFiaWxpdHkpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZW1pdEdldEZyb21TY29wZShuZXdUZW1wb3Jh
cnkoKSwgc2NvcGUuZ2V0KCksIHZhck5ld1Byb21pc2VDYXBhYmlsaXR5LCBUaHJvd0lmTm90Rm91
bmQpOworCisgICAgICAgIENhbGxBcmd1bWVudHMgYXJncygqdGhpcywgbnVsbHB0ciwgMSk7Cisg
ICAgICAgIGVtaXRMb2FkKGFyZ3MudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOworCisg
ICAgICAgIGF1dG8gdmFyUHJvbWlzZUNvbnN0cnVjdG9yID0gdmFyaWFibGUocHJvcGVydHlOYW1l
cygpLmJ1aWx0aW5OYW1lcygpLlByb21pc2VQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgbW92ZVRv
RGVzdGluYXRpb25JZk5lZWRlZChzY29wZS5nZXQoKSwgZW1pdFJlc29sdmVTY29wZShzY29wZS5n
ZXQoKSwgdmFyUHJvbWlzZUNvbnN0cnVjdG9yKSk7CisgICAgICAgIGVtaXRHZXRGcm9tU2NvcGUo
YXJncy5hcmd1bWVudFJlZ2lzdGVyKDApLCBzY29wZS5nZXQoKSwgdmFyUHJvbWlzZUNvbnN0cnVj
dG9yLCBUaHJvd0lmTm90Rm91bmQpOworCisgICAgICAgIC8vIEpTVGV4dFBvc2l0aW9uKGludCBf
bGluZSwgaW50IF9vZmZzZXQsIGludCBfbGluZVN0YXJ0T2Zmc2V0KQorICAgICAgICBKU1RleHRQ
b3NpdGlvbiBkaXZvdChtX3Njb3BlTm9kZS0+Zmlyc3RMaW5lKCksIG1fc2NvcGVOb2RlLT5zdGFy
dE9mZnNldCgpLCBtX3Njb3BlTm9kZS0+bGluZVN0YXJ0T2Zmc2V0KCkpOworICAgICAgICBlbWl0
Q2FsbChwcm9taXNlQ2FwYWJpbGl0eVJlZ2lzdGVyKCksIG5ld1Byb21pc2VDYXBhYmlsaXR5Lmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIGRpdm90LCBkaXZvdCwgZGl2b3QsIERlYnVn
Z2FibGVDYWxsOjpObyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNjc0LDIxICs2OTIs
MTcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rp
b25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAgICAgICAgUmVmUHRyPExhYmVsPiBjYXRj
aEhlcmUgPSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7CiAgICAgICAgIHBvcFRyeUFuZEVt
aXRDYXRjaCh0cnlGb3JtYWxQYXJhbWV0ZXJzRGF0YSwgZXhjZXB0aW9uLmdldCgpLCB0aHJvd25W
YWx1ZS5nZXQoKSwgY2F0Y2hIZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6Q2F0Y2gpOwogCi0gICAg
ICAgIC8vIHJldHVybiBAUHJvbWlzZS5AcmVqZWN0KHRocm93blZhbHVlKTsKLSAgICAgICAgVmFy
aWFibGUgcHJvbWlzZVZhciA9IHZhcmlhYmxlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLlByb21pc2VQcml2YXRlTmFtZSgpKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHNjb3BlID0gZW1pdFJlc29sdmVTY29wZShuZXdUZW1wb3JhcnkoKSwgcHJvbWlzZVZhcik7Ci0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9taXNlQ29uc3RydWN0b3IgPSBlbWl0R2V0RnJv
bVNjb3BlKG5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgcHJvbWlzZVZhciwgUmVzb2x2ZU1v
ZGU6OlRocm93SWZOb3RGb3VuZCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9taXNl
UmVqZWN0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHByb21pc2VDb25zdHJ1Y3Rvci5n
ZXQoKSwgbV92bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucmVqZWN0UHJpdmF0ZU5h
bWUoKSk7CisgICAgICAgIC8vIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0KHRocm93
blZhbHVlKQorICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVqZWN0ID0gZW1pdEdldEJ5SWQo
bmV3VGVtcG9yYXJ5KCksIHByb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXIoKSwgbV92bS0+cHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucmVqZWN0UHJpdmF0ZU5hbWUoKSk7CiAKICAgICAgICAg
Q2FsbEFyZ3VtZW50cyBhcmdzKCp0aGlzLCBudWxscHRyLCAxKTsKLQotICAgICAgICBlbWl0TW92
ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBwcm9taXNlQ29uc3RydWN0b3IuZ2V0KCkpOworICAgICAg
ICBlbWl0TG9hZChhcmdzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAg
ZW1pdE1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDApLCB0aHJvd25WYWx1ZS5nZXQoKSk7CiAK
ICAgICAgICAgSlNUZXh0UG9zaXRpb24gZGl2b3QoZnVuY3Rpb25Ob2RlLT5maXJzdExpbmUoKSwg
ZnVuY3Rpb25Ob2RlLT5zdGFydE9mZnNldCgpLCBmdW5jdGlvbk5vZGUtPmxpbmVTdGFydE9mZnNl
dCgpKTsKIAotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZW1pdENhbGwobmV3
VGVtcG9yYXJ5KCksIHByb21pc2VSZWplY3QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJn
cywgZGl2b3QsIGRpdm90LCBkaXZvdCwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKLSAgICAgICAgZW1p
dFJldHVybihyZXN1bHQuZ2V0KCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0
ID0gZW1pdENhbGwobmV3VGVtcG9yYXJ5KCksIHJlamVjdC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0
aW9uLCBhcmdzLCBkaXZvdCwgZGl2b3QsIGRpdm90LCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOworICAg
ICAgICBlbWl0UmV0dXJuKGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBwcm9taXNlQ2FwYWJp
bGl0eVJlZ2lzdGVyKCksIG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnByb21p
c2VQcml2YXRlTmFtZSgpKSk7CiAKICAgICAgICAgZW1pdExhYmVsKGRpZE5vdFRocm93LmdldCgp
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggNzIxYjM5NmJhNzlmZWE5NjhmZTAxOWIyOGUxN2Qw
MzYwZDZlNTU0Mi4uNDM3YTJlZGZiNDVlZTIzNWJjOTZmMDlhZDVlMTk0MTQ0NTI2ZDNlZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaApAQCAtMzE1LDYgKzMxNSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IFJlZ2lzdGVySUQqIGdlbmVyYXRvclJlZ2lzdGVyKCkgeyByZXR1cm4gbV9nZW5lcmF0b3JSZWdp
c3RlcjsgfQogCisgICAgICAgIFJlZ2lzdGVySUQqIHByb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXIo
KSB7IHJldHVybiBtX3Byb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXI7IH0KKwogICAgICAgICAvLyBS
ZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyBy
ZXR1cm5lZCBieQogICAgICAgICAvLyBuZXdUZW1wb3JhcnkgcmVxdWlyZSBhIG1vZGlmaWVkIGZv
cm0gb2YgcmVmZXJlbmNlIGNvdW50aW5nOiBhbnkKICAgICAgICAgLy8gcmVnaXN0ZXIgd2l0aCBh
IHJlZmNvdW50IG9mIDAgaXMgY29uc2lkZXJlZCAiYXZhaWxhYmxlIiwgbWVhbmluZyB0aGF0CkBA
IC05MzEsNiArOTMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1f
aXNEZXJpdmVkQ29uc3R1Y3RvciB7IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9s
aW5rVGltZUNvbnN0YW50UmVnaXN0ZXJzW0xpbmtUaW1lQ29uc3RhbnRDb3VudF07CiAgICAgICAg
IFJlZ2lzdGVySUQqIG1fYXJyb3dGdW5jdGlvbkNvbnRleHRMZXhpY2FsRW52aXJvbm1lbnRSZWdp
c3RlciB7IG51bGxwdHIgfTsKKyAgICAgICAgUmVnaXN0ZXJJRCogbV9wcm9taXNlQ2FwYWJpbGl0
eVJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3Rl
cklEKiwgMTY+IG1fbG9jYWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlUmVnaXN0ZXJzOwogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwCmluZGV4IGQzNTk1Y2Y5YTkyMDM2M2FmNGMzNTlmM2Y4MjhiYjBjMWRmM2U5YmEuLmVk
YjY1ZDdkZWU5MGNjMmUyMjMwOGExZGUxYzI5NjBhOTY2ODY4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTM0NjYs
MjYgKzM0NjYsMjQgQEAgdm9pZCBGdW5jdGlvbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKICAgICAgICAgQVNTRVJUKHN0YXJ0T2Zm
c2V0KCkgPj0gbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsTGVhdmVDYWxsRnJhbWUsIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVT
dGFydE9mZnNldCgpKTsKIAotICAgICAgICAvLyBsb2FkIEBhc3luY0Z1bmN0aW9uUmVzdW1lLCBh
bmQgY2FsbC4KLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN0YXJ0QXN5bmNGdW5jdGlvbiA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgLy8gbG9hZCBhbmQgY2FsbCBAYXN5
bmNGdW5jdGlvblJlc3VtZQogICAgICAgICBhdXRvIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShn
ZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFzeW5jRnVuY3Rpb25SZXN1
bWVQcml2YXRlTmFtZSgpKTsKLQogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5h
dGlvbklmTmVlZGVkKHNjb3BlLmdldCgpLCBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShzY29w
ZS5nZXQoKSwgdmFyKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKHN0YXJ0
QXN5bmNGdW5jdGlvbi5nZXQoKSwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsK
KyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGFzeW5jRnVuY3Rpb25SZXN1bWUgPSBnZW5lcmF0
b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgp
LCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CiAKLSAgICAgICAgLy8gcmV0dXJuIEBhc3luY0Z1bmN0
aW9uUmVzdW1lLkBjYWxsKHRoaXMsIEBnZW5lcmF0b3IsIEB1bmRlZmluZWQsIEdlbmVyYXRvclJl
c3VtZU1vZGU6Ok5vcm1hbE1vZGUpCi0gICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0
b3IsIG51bGxwdHIsIDMpOworICAgICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9yLCBu
dWxscHRyLCA0KTsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0TG9hZChhcmdzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGFyZ3MuYXJndW1lbnRSZWdpc3Rlcihhcmd1bWVu
dENvdW50KyspLCBnZW5lcmF0b3IuZ2VuZXJhdG9yUmVnaXN0ZXIoKSk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0TW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRDb3VudCsrKSwgZ2Vu
ZXJhdG9yLnByb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXIoKSk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TG9hZChhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRDb3VudCsrKSwganNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChhcmdzLmFyZ3VtZW50UmVnaXN0ZXIo
YXJndW1lbnRDb3VudCsrKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0
b3JGdW5jdGlvbjo6R2VuZXJhdG9yUmVzdW1lTW9kZTo6Tm9ybWFsTW9kZSkpKTsKICAgICAgICAg
Ly8gSlNUZXh0UG9zaXRpb24oaW50IF9saW5lLCBpbnQgX29mZnNldCwgaW50IF9saW5lU3RhcnRP
ZmZzZXQpCiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90KGZpcnN0TGluZSgpLCBzdGFydE9m
ZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJlc3VsdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRDYWxsSW5UYWlsUG9zaXRpb24ocmVzdWx0LmdldCgpLCBzdGFydEFzeW5jRnVuY3Rpb24uZ2V0
KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2b3QsIGRpdm90LCBkaXZvdCwgRGVidWdn
YWJsZUNhbGw6Ok5vKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24o
cmVzdWx0LmdldCgpLCBhc3luY0Z1bmN0aW9uUmVzdW1lLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rp
b24sIGFyZ3MsIGRpdm90LCBkaXZvdCwgZGl2b3QsIERlYnVnZ2FibGVDYWxsOjpObyk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0UmV0dXJuKHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggMmE0YWFmMzljNmU4NGI0ZTBhZmJmNmQyMmJiMDY5Nzg2Yjk3NGQ0NS4uNmM4ZWNlNGMx
ZmRkMTZkYjEwYTQ1YWIwMWMwMzc1ZTM4YTFjYjdlZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNi0xMS0x
NCAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtKU0NdIGRv
IG5vdCByZWZlcmVuY2UgQXdhaXRFeHByZXNzaW9uIFByb21pc2VzIGluIGFzeW5jIGZ1bmN0aW9u
IFByb21pc2UgY2hhaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDc1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogYXN5bmNGdW5jdGlvblRlc3RzLnlhbWw6CisgICAgICAgICogc3RyZXNzL2FzeW5j
LWF3YWl0LWxvbmctbG9vcC5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAg
IChhc3luYy5sb25nTG9vcCk6CisgICAgICAgICogc3RyZXNzL2FzeW5jLWF3YWl0LXRocm93LWxv
b3AuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoYXN5bmMudGhyb3dl
cik6CisgICAgICAgIChhc3luYy50aHJvd0xvb3ApOgorCiAyMDE2LTExLTE0ICBLZWl0aCBNaWxs
ZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBXYXNtIHNlbGVjdApk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9hc3luY0Z1bmN0aW9uVGVzdHMueWFtbCBiL0pTVGVzdHMvYXN5
bmNGdW5jdGlvblRlc3RzLnlhbWwKaW5kZXggMWUzOGJmYjljYzRkMmVhZThkMWFiODhmZDBkMmI3
NTA1N2VlZjMzMy4uNTA3NmRkNWE0ZWRiMGNmOTFmZjIyYjE2NjE1ZGMyZjk4OWM2YjkxZSAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9hc3luY0Z1bmN0aW9uVGVzdHMueWFtbAorKysgYi9KU1Rlc3RzL2Fz
eW5jRnVuY3Rpb25UZXN0cy55YW1sCkBAIC00Myw2ICs0MywxMCBAQAogICBjbWQ6IHJ1bkRlZmF1
bHQKIC0gcGF0aDogc3RyZXNzL2FzeW5jLWF3YWl0LXJlc2VydmVkLXdvcmQuanMKICAgY21kOiBy
dW5EZWZhdWx0CistIHBhdGg6IHN0cmVzcy9hc3luYy1hd2FpdC1sb25nLWxvb3AuanMKKyAgY21k
OiBydW5Ob0NKSVQgIi0tZ2NNYXhIZWFwU2l6ZT0yMDAwMDAwIgorLSBwYXRoOiBzdHJlc3MvYXN5
bmMtYXdhaXQtdGhyb3ctbG9vcC5qcworICBjbWQ6IHJ1bk5vQ0pJVCAiLS1nY01heEhlYXBTaXpl
PTIwMDAwMDAiCiAKICMgRlRMSklUCiAtIHBhdGg6IHN0cmVzcy9hc3luYy1mdW5jdGlvbi1jcmVh
dGUtb3B0aW1pemVkLmpzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC1s
b25nLWxvb3AuanMgYi9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC1sb25nLWxvb3AuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzQxMjM0ZGQ4NGRlYTczZWU3Y2QzNzhmMmNjMGY5NmMzZDJkNzI0YQotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2FzeW5jLWF3YWl0LWxvbmctbG9vcC5qcwpAQCAt
MCwwICsxLDI4IEBACisvLyBDb3B5cmlnaHQgKEMpIENvcHlyaWdodCAyMDE2IHRoZSB2OCBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKy8vIFRoaXMgdGVzdCByZXF1aXJl
cyBFTkFCTEVfRVMyMDE3X0FTWU5DRlVOQ1RJT05fU1lOVEFYIHRvIGJlIGVuYWJsZWQgYXQgYnVp
bGQgdGltZS4KKy8vQCBza2lwCisvLyBUT0RPOiBAcnVuRlRMTm9DSklUKCItLWdjTWF4SGVhcFNp
emU9MjAwMDAwMCIpCisKKworZnVuY3Rpb24gc2hvdWxkQmUoZXhwZWN0ZWQsIGFjdHVhbCwgbXNn
ID0gIiIpIHsKKyAgICBpZiAobXNnKQorICAgICAgICBtc2cgPSAiIGZvciAiICsgbXNnOworICAg
IGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2
YWx1ZSIgKyBtc2cgKyAiOiAiICsgYWN0dWFsICsgIi4gRXhwZWN0ZWQgIiArIGV4cGVjdGVkKTsK
K30KKworCitsZXQgb3V0OworCithc3luYyBmdW5jdGlvbiBsb25nTG9vcCgpIHsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspCisgICAgICAgIGF3YWl0IHVuZGVmaW5lZDsKKyAg
ICBvdXQgPSAxOworfQorCitsb25nTG9vcCgpOworCitkcmFpbk1pY3JvdGFza3MoKTsKKworc2hv
dWxkQmUob3V0LCAxKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FzeW5jLWF3YWl0LXRo
cm93LWxvb3AuanMgYi9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC10aHJvdy1sb29wLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY3NzIyYzI1M2YzMGNlYjA4ZGRkODk3NzZlNDc2NjQxOTM2NDJjNmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC10aHJvdy1sb29wLmpzCkBA
IC0wLDAgKzEsMzQgQEAKKy8vIENvcHlyaWdodCAoQykgQ29weXJpZ2h0IDIwMTYgdGhlIHY4IHBy
b2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworLy8gVGhpcyB0ZXN0IHJlcXVp
cmVzIEVOQUJMRV9FUzIwMTdfQVNZTkNGVU5DVElPTl9TWU5UQVggdG8gYmUgZW5hYmxlZCBhdCBi
dWlsZCB0aW1lLgorLy9AIHNraXAKKy8vIFRPRE86IEBydW5GVExOb0NKSVQoIi0tZ2NNYXhIZWFw
U2l6ZT0yMDAwMDAwIikKKworZnVuY3Rpb24gc2hvdWxkQmUoZXhwZWN0ZWQsIGFjdHVhbCwgbXNn
ID0gIiIpIHsKKyAgICBpZiAobXNnKQorICAgICAgICBtc2cgPSAiIGZvciAiICsgbXNnOworICAg
IGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2
YWx1ZSIgKyBtc2cgKyAiOiAiICsgYWN0dWFsICsgIi4gRXhwZWN0ZWQgIiArIGV4cGVjdGVkKTsK
K30KKworCitsZXQgb3V0OworCithc3luYyBmdW5jdGlvbiB0aHJvd2VyKCkgeyB0aHJvdyB1bmRl
ZmluZWQ7IH0KKworYXN5bmMgZnVuY3Rpb24gdGhyb3dMb29wKCkgeworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgODAwMDsgaSsrKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhd2FpdCB0
aHJvd2VyKCk7CisgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICB2b2lkIDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgb3V0ID0gMjsKK30KKwordGhyb3dMb29wKCk7CisKK2Ry
YWluTWljcm90YXNrcygpOworCitzaG91bGRCZShvdXQsIDIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294799</attachid>
            <date>2016-11-14 19:42:05 -0800</date>
            <delta_ts>2016-11-14 20:28:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164753-20161114224204.patch</filename>
            <type>text/plain</type>
            <size>15080</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OTI2YjhmNzA3ZDYxYjY0MDAzZWE2MjQ3OTAwNzViNDFlZDc2ZmJjLi43OTg0MDZlMTlhMzUwNTg0
ZjJhNDA4ZmE0OTI2NDI0MTAzMjA2NGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNi0xMS0xNCAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIGRvIG5vdCByZWZlcmVuY2UgQXdhaXRFeHByZXNzaW9uIFByb21p
c2VzIGluIGFzeW5jIGZ1bmN0aW9uIFByb21pc2UgY2hhaW4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDc1MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIGxvbmctcnVubmluZyBhc3lu
YyBmdW5jdGlvbnMgd2hpY2ggY29udGFpbmVkIG1hbnkgQXdhaXRFeHByZXNzaW9ucworICAgICAg
ICB3b3VsZCBhbGxvY2F0ZSBhbmQgcmV0YWluIHJlZmVyZW5jZXMgdG8gaW50ZXJtZWRpYXRlIFBy
b21pc2Ugb2JqZWN0cyBmb3IgZWFjaCBgYXdhaXRgLAorICAgICAgICByZXN1bHRpbmcgaW4gYSBt
ZW1vcnkgbGVhay4KKworICAgICAgICBUbyBtaXRpZ2F0ZSB0aGlzIGxlYWssIGEgcmVmZXJlbmNl
IHRvIHRoZSBvcmlnaW5hbCBQcm9taXNlIChhbmQgaXRzIHJlc29sdmUgYW5kIHJlamVjdAorICAg
ICAgICBmdW5jdGlvbnMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXN5bmMgZnVuY3Rpb24gYXJlIGtl
cHQsIGFuZCBwYXNzZWQgdG8gZWFjaCBjYWxsIHRvCisgICAgICAgIEBhc3luY0Z1bmN0aW9uUmVz
dW1lLCB3aGlsZSBpbnRlcm1lZGlhdGUgUHJvbWlzZXMgYXJlIGRpc2NhcmRlZC4gVGhpcyBpcyBk
b25lIGJ5IGFkZGluZworICAgICAgICBhIG5ldyBSZWdpc3RlciB0byB0aGUgQnl0ZWNvZGVHZW5l
cmF0b3IgdG8gaG9sZCB0aGUgUHJvbWlzZUNhcGFiaWxpdHkgb2JqZWN0IGFzc29jaWF0ZWQKKyAg
ICAgICAgd2l0aCBhbiBhc3luYyBmdW5jdGlvbiB3cmFwcGVyLiBUaGUgY2FwYWJpbGl0eSBpcyB1
c2VkIHRvIHJlamVjdCB0aGUgUHJvbWlzZSBpZiBhbgorICAgICAgICBleGNlcHRpb24gaXMgdGhy
b3duIGR1cmluZyBwYXJhbWV0ZXIgaW5pdGlhbGl6YXRpb24sIGFuZCBpcyB1c2VkIHRvIHN0b3Jl
IHRoZSByZXN1bHRpbmcKKyAgICAgICAgdmFsdWUgb25jZSB0aGUgYXN5bmMgZnVuY3Rpb24gaGFz
IHRlcm1pbmF0ZWQuCisKKyAgICAgICAgKiBidWlsdGlucy9Bc3luY0Z1bmN0aW9uUHJvdG90eXBl
LmpzOgorICAgICAgICAoZ2xvYmFsUHJpdmF0ZS5hc3luY0Z1bmN0aW9uUmVzdW1lKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAqIGJ5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6cHJvbWlzZUNhcGFiaWxpdHlSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uTm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKwogMjAxNi0xMS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIGZpeCBjbG9vcC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9Bc3luY0Z1bmN0aW9uUHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuanMKaW5kZXggZWE5MGVmNGQ0
MzhlYTZmOTExZWExOWE5MTViNGI4ZjQ3ZjQ1NmNiNi4uOGQ0MDM2N2I5YzllZDE1ZTkzNTgxNDc2
MDQzZGU5NjE0NGE3NGNiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL0FzeW5jRnVuY3Rpb25Qcm90b3R5cGUuanMKQEAgLTI0LDcgKzI0LDcgQEAKICAq
LwogCiBAZ2xvYmFsUHJpdmF0ZQotZnVuY3Rpb24gYXN5bmNGdW5jdGlvblJlc3VtZShnZW5lcmF0
b3IsIHNlbnRWYWx1ZSwgcmVzdW1lTW9kZSkKK2Z1bmN0aW9uIGFzeW5jRnVuY3Rpb25SZXN1bWUo
Z2VuZXJhdG9yLCBwcm9taXNlQ2FwYWJpbGl0eSwgc2VudFZhbHVlLCByZXN1bWVNb2RlKQogewog
ICAgICJ1c2Ugc3RyaWN0IjsKICAgICBsZXQgc3RhdGUgPSBnZW5lcmF0b3IuQGdlbmVyYXRvclN0
YXRlOwpAQCAtMzgsMTQgKzM4LDE4IEBAIGZ1bmN0aW9uIGFzeW5jRnVuY3Rpb25SZXN1bWUoZ2Vu
ZXJhdG9yLCBzZW50VmFsdWUsIHJlc3VtZU1vZGUpCiAgICAgICAgIHZhbHVlID0gZ2VuZXJhdG9y
LkBnZW5lcmF0b3JOZXh0LkBjYWxsKGdlbmVyYXRvci5AZ2VuZXJhdG9yVGhpcywgZ2VuZXJhdG9y
LCBzdGF0ZSwgc2VudFZhbHVlLCByZXN1bWVNb2RlLCBnZW5lcmF0b3IuQGdlbmVyYXRvckZyYW1l
KTsKICAgICAgICAgaWYgKGdlbmVyYXRvci5AZ2VuZXJhdG9yU3RhdGUgPT09IEBHZW5lcmF0b3JT
dGF0ZUV4ZWN1dGluZykgewogICAgICAgICAgICAgZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZSA9
IEBHZW5lcmF0b3JTdGF0ZUNvbXBsZXRlZDsKLSAgICAgICAgICAgIHJldHVybiBAUHJvbWlzZS5A
cmVzb2x2ZSh2YWx1ZSk7CisgICAgICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSh2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7CiAg
ICAgICAgIH0KICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICBnZW5lcmF0b3IuQGdlbmVy
YXRvclN0YXRlID0gQEdlbmVyYXRvclN0YXRlQ29tcGxldGVkOwotICAgICAgICByZXR1cm4gQFBy
b21pc2UuQHJlamVjdChlcnJvcik7CisgICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3Qo
ZXJyb3IpOworICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7CiAgICAg
fQogCi0gICAgcmV0dXJuIEBQcm9taXNlLkByZXNvbHZlKHZhbHVlKS5AdGhlbigKLSAgICAgICAg
ZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIEBhc3luY0Z1bmN0aW9uUmVzdW1lKGdlbmVyYXRvciwg
dmFsdWUsIEBHZW5lcmF0b3JSZXN1bWVNb2RlTm9ybWFsKTsgfSwKLSAgICAgICAgZnVuY3Rpb24o
ZXJyb3IpIHsgcmV0dXJuIEBhc3luY0Z1bmN0aW9uUmVzdW1lKGdlbmVyYXRvciwgZXJyb3IsIEBH
ZW5lcmF0b3JSZXN1bWVNb2RlVGhyb3cpOyB9KTsKKyAgICBAUHJvbWlzZS5AcmVzb2x2ZSh2YWx1
ZSkuQHRoZW4oCisgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7IEBhc3luY0Z1bmN0aW9uUmVzdW1l
KGdlbmVyYXRvciwgcHJvbWlzZUNhcGFiaWxpdHksIHZhbHVlLCBAR2VuZXJhdG9yUmVzdW1lTW9k
ZU5vcm1hbCk7IH0sCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IEBhc3luY0Z1bmN0aW9uUmVz
dW1lKGdlbmVyYXRvciwgcHJvbWlzZUNhcGFiaWxpdHksIGVycm9yLCBAR2VuZXJhdG9yUmVzdW1l
TW9kZVRocm93KTsgfSk7CisKKyAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDY5YjI1MzlkNmFhODUwNTBlMDkyZWIyMzVhZjU4ZDQy
ZTk3YTVkYTYuLjdmMGUzMTM3NTVmMjRkOWNlZmZkMGM3OWE2MzVkYTY3NTU4MDk2ZWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCkBAIC01NjIsNiArNTYyLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UK
ICAgICAgICAgQVNTRVJUKCFpc0NvbnN0cnVjdG9yKCkpOwogICAgICAgICBBU1NFUlQoY29uc3Ry
dWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpOb25lKTsKICAgICAgICAgbV9nZW5lcmF0
b3JSZWdpc3RlciA9IGFkZFZhcigpOworICAgICAgICBtX3Byb21pc2VDYXBhYmlsaXR5UmVnaXN0
ZXIgPSBhZGRWYXIoKTsKIAogICAgICAgICBpZiAocGFyc2VNb2RlICE9IFNvdXJjZVBhcnNlTW9k
ZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IEVtaXQg
dG9fdGhpcyBvbmx5IHdoZW4gQXN5bmNGdW5jdGlvbkJvZHkgdXNlcyBpdC4KQEAgLTU3NCw2ICs1
NzUsMjMgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVu
Y3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAgICAgICAgfQogCiAgICAgICAgIGVt
aXROZXdPYmplY3QobV9nZW5lcmF0b3JSZWdpc3Rlcik7CisKKyAgICAgICAgLy8gbGV0IHByb21p
c2VDYXBhYmlsaXR5IGJlIEBuZXdQcm9taXNlQ2FwYWJpbGl0eShAUHJvbWlzZSkKKyAgICAgICAg
YXV0byB2YXJOZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHZhcmlhYmxlKHByb3BlcnR5TmFtZXMoKS5i
dWlsdGluTmFtZXMoKS5uZXdQcm9taXNlQ2FwYWJpbGl0eVByaXZhdGVOYW1lKCkpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBuZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgbW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChzY29wZS5nZXQoKSwgZW1pdFJlc29sdmVTY29wZShzY29w
ZS5nZXQoKSwgdmFyTmV3UHJvbWlzZUNhcGFiaWxpdHkpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZW1pdEdldEZyb21TY29wZShuZXdUZW1wb3Jh
cnkoKSwgc2NvcGUuZ2V0KCksIHZhck5ld1Byb21pc2VDYXBhYmlsaXR5LCBUaHJvd0lmTm90Rm91
bmQpOworCisgICAgICAgIENhbGxBcmd1bWVudHMgYXJncygqdGhpcywgbnVsbHB0ciwgMSk7Cisg
ICAgICAgIGVtaXRMb2FkKGFyZ3MudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOworCisg
ICAgICAgIGF1dG8gdmFyUHJvbWlzZUNvbnN0cnVjdG9yID0gdmFyaWFibGUocHJvcGVydHlOYW1l
cygpLmJ1aWx0aW5OYW1lcygpLlByb21pc2VQcml2YXRlTmFtZSgpKTsKKyAgICAgICAgbW92ZVRv
RGVzdGluYXRpb25JZk5lZWRlZChzY29wZS5nZXQoKSwgZW1pdFJlc29sdmVTY29wZShzY29wZS5n
ZXQoKSwgdmFyUHJvbWlzZUNvbnN0cnVjdG9yKSk7CisgICAgICAgIGVtaXRHZXRGcm9tU2NvcGUo
YXJncy5hcmd1bWVudFJlZ2lzdGVyKDApLCBzY29wZS5nZXQoKSwgdmFyUHJvbWlzZUNvbnN0cnVj
dG9yLCBUaHJvd0lmTm90Rm91bmQpOworCisgICAgICAgIC8vIEpTVGV4dFBvc2l0aW9uKGludCBf
bGluZSwgaW50IF9vZmZzZXQsIGludCBfbGluZVN0YXJ0T2Zmc2V0KQorICAgICAgICBKU1RleHRQ
b3NpdGlvbiBkaXZvdChtX3Njb3BlTm9kZS0+Zmlyc3RMaW5lKCksIG1fc2NvcGVOb2RlLT5zdGFy
dE9mZnNldCgpLCBtX3Njb3BlTm9kZS0+bGluZVN0YXJ0T2Zmc2V0KCkpOworICAgICAgICBlbWl0
Q2FsbChwcm9taXNlQ2FwYWJpbGl0eVJlZ2lzdGVyKCksIG5ld1Byb21pc2VDYXBhYmlsaXR5Lmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIGRpdm90LCBkaXZvdCwgZGl2b3QsIERlYnVn
Z2FibGVDYWxsOjpObyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNjc0LDIxICs2OTIs
MTcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rp
b25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2UKICAgICAgICAgUmVmUHRyPExhYmVsPiBjYXRj
aEhlcmUgPSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7CiAgICAgICAgIHBvcFRyeUFuZEVt
aXRDYXRjaCh0cnlGb3JtYWxQYXJhbWV0ZXJzRGF0YSwgZXhjZXB0aW9uLmdldCgpLCB0aHJvd25W
YWx1ZS5nZXQoKSwgY2F0Y2hIZXJlLmdldCgpLCBIYW5kbGVyVHlwZTo6Q2F0Y2gpOwogCi0gICAg
ICAgIC8vIHJldHVybiBAUHJvbWlzZS5AcmVqZWN0KHRocm93blZhbHVlKTsKLSAgICAgICAgVmFy
aWFibGUgcHJvbWlzZVZhciA9IHZhcmlhYmxlKG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLlByb21pc2VQcml2YXRlTmFtZSgpKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHNjb3BlID0gZW1pdFJlc29sdmVTY29wZShuZXdUZW1wb3JhcnkoKSwgcHJvbWlzZVZhcik7Ci0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9taXNlQ29uc3RydWN0b3IgPSBlbWl0R2V0RnJv
bVNjb3BlKG5ld1RlbXBvcmFyeSgpLCBzY29wZS5nZXQoKSwgcHJvbWlzZVZhciwgUmVzb2x2ZU1v
ZGU6OlRocm93SWZOb3RGb3VuZCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9taXNl
UmVqZWN0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHByb21pc2VDb25zdHJ1Y3Rvci5n
ZXQoKSwgbV92bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucmVqZWN0UHJpdmF0ZU5h
bWUoKSk7CisgICAgICAgIC8vIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0KHRocm93
blZhbHVlKQorICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVqZWN0ID0gZW1pdEdldEJ5SWQo
bmV3VGVtcG9yYXJ5KCksIHByb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXIoKSwgbV92bS0+cHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucmVqZWN0UHJpdmF0ZU5hbWUoKSk7CiAKICAgICAgICAg
Q2FsbEFyZ3VtZW50cyBhcmdzKCp0aGlzLCBudWxscHRyLCAxKTsKLQotICAgICAgICBlbWl0TW92
ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBwcm9taXNlQ29uc3RydWN0b3IuZ2V0KCkpOworICAgICAg
ICBlbWl0TG9hZChhcmdzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAg
ZW1pdE1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDApLCB0aHJvd25WYWx1ZS5nZXQoKSk7CiAK
ICAgICAgICAgSlNUZXh0UG9zaXRpb24gZGl2b3QoZnVuY3Rpb25Ob2RlLT5maXJzdExpbmUoKSwg
ZnVuY3Rpb25Ob2RlLT5zdGFydE9mZnNldCgpLCBmdW5jdGlvbk5vZGUtPmxpbmVTdGFydE9mZnNl
dCgpKTsKIAotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZW1pdENhbGwobmV3
VGVtcG9yYXJ5KCksIHByb21pc2VSZWplY3QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJn
cywgZGl2b3QsIGRpdm90LCBkaXZvdCwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKLSAgICAgICAgZW1p
dFJldHVybihyZXN1bHQuZ2V0KCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0
ID0gZW1pdENhbGwobmV3VGVtcG9yYXJ5KCksIHJlamVjdC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0
aW9uLCBhcmdzLCBkaXZvdCwgZGl2b3QsIGRpdm90LCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOworICAg
ICAgICBlbWl0UmV0dXJuKGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBwcm9taXNlQ2FwYWJp
bGl0eVJlZ2lzdGVyKCksIG1fdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnByb21p
c2VQcml2YXRlTmFtZSgpKSk7CiAKICAgICAgICAgZW1pdExhYmVsKGRpZE5vdFRocm93LmdldCgp
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggNzIxYjM5NmJhNzlmZWE5NjhmZTAxOWIyOGUxN2Qw
MzYwZDZlNTU0Mi4uNDM3YTJlZGZiNDVlZTIzNWJjOTZmMDlhZDVlMTk0MTQ0NTI2ZDNlZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaApAQCAtMzE1LDYgKzMxNSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IFJlZ2lzdGVySUQqIGdlbmVyYXRvclJlZ2lzdGVyKCkgeyByZXR1cm4gbV9nZW5lcmF0b3JSZWdp
c3RlcjsgfQogCisgICAgICAgIFJlZ2lzdGVySUQqIHByb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXIo
KSB7IHJldHVybiBtX3Byb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXI7IH0KKwogICAgICAgICAvLyBS
ZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSB0ZW1wb3JhcnkgcmVnaXN0ZXIuIFJlZ2lzdGVycyBy
ZXR1cm5lZCBieQogICAgICAgICAvLyBuZXdUZW1wb3JhcnkgcmVxdWlyZSBhIG1vZGlmaWVkIGZv
cm0gb2YgcmVmZXJlbmNlIGNvdW50aW5nOiBhbnkKICAgICAgICAgLy8gcmVnaXN0ZXIgd2l0aCBh
IHJlZmNvdW50IG9mIDAgaXMgY29uc2lkZXJlZCAiYXZhaWxhYmxlIiwgbWVhbmluZyB0aGF0CkBA
IC05MzEsNiArOTMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1f
aXNEZXJpdmVkQ29uc3R1Y3RvciB7IG51bGxwdHIgfTsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9s
aW5rVGltZUNvbnN0YW50UmVnaXN0ZXJzW0xpbmtUaW1lQ29uc3RhbnRDb3VudF07CiAgICAgICAg
IFJlZ2lzdGVySUQqIG1fYXJyb3dGdW5jdGlvbkNvbnRleHRMZXhpY2FsRW52aXJvbm1lbnRSZWdp
c3RlciB7IG51bGxwdHIgfTsKKyAgICAgICAgUmVnaXN0ZXJJRCogbV9wcm9taXNlQ2FwYWJpbGl0
eVJlZ2lzdGVyIHsgbnVsbHB0ciB9OwogCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3Rl
cklEKiwgMTY+IG1fbG9jYWxSZWdpc3RlcnNGb3JDYWxsZWVTYXZlUmVnaXN0ZXJzOwogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3RhbnRQb29sUmVnaXN0ZXJz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwCmluZGV4IGQzNTk1Y2Y5YTkyMDM2M2FmNGMzNTlmM2Y4MjhiYjBjMWRmM2U5YmEuLmVk
YjY1ZDdkZWU5MGNjMmUyMjMwOGExZGUxYzI5NjBhOTY2ODY4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTM0NjYs
MjYgKzM0NjYsMjQgQEAgdm9pZCBGdW5jdGlvbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKICAgICAgICAgQVNTRVJUKHN0YXJ0T2Zm
c2V0KCkgPj0gbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsTGVhdmVDYWxsRnJhbWUsIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVT
dGFydE9mZnNldCgpKTsKIAotICAgICAgICAvLyBsb2FkIEBhc3luY0Z1bmN0aW9uUmVzdW1lLCBh
bmQgY2FsbC4KLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN0YXJ0QXN5bmNGdW5jdGlvbiA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgLy8gbG9hZCBhbmQgY2FsbCBAYXN5
bmNGdW5jdGlvblJlc3VtZQogICAgICAgICBhdXRvIHZhciA9IGdlbmVyYXRvci52YXJpYWJsZShn
ZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFzeW5jRnVuY3Rpb25SZXN1
bWVQcml2YXRlTmFtZSgpKTsKLQogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5h
dGlvbklmTmVlZGVkKHNjb3BlLmdldCgpLCBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShzY29w
ZS5nZXQoKSwgdmFyKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKHN0YXJ0
QXN5bmNGdW5jdGlvbi5nZXQoKSwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsK
KyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGFzeW5jRnVuY3Rpb25SZXN1bWUgPSBnZW5lcmF0
b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgp
LCB2YXIsIFRocm93SWZOb3RGb3VuZCk7CiAKLSAgICAgICAgLy8gcmV0dXJuIEBhc3luY0Z1bmN0
aW9uUmVzdW1lLkBjYWxsKHRoaXMsIEBnZW5lcmF0b3IsIEB1bmRlZmluZWQsIEdlbmVyYXRvclJl
c3VtZU1vZGU6Ok5vcm1hbE1vZGUpCi0gICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0
b3IsIG51bGxwdHIsIDMpOworICAgICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9yLCBu
dWxscHRyLCA0KTsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudCA9IDA7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0TG9hZChhcmdzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGFyZ3MuYXJndW1lbnRSZWdpc3Rlcihhcmd1bWVu
dENvdW50KyspLCBnZW5lcmF0b3IuZ2VuZXJhdG9yUmVnaXN0ZXIoKSk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0TW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRDb3VudCsrKSwgZ2Vu
ZXJhdG9yLnByb21pc2VDYXBhYmlsaXR5UmVnaXN0ZXIoKSk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TG9hZChhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRDb3VudCsrKSwganNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChhcmdzLmFyZ3VtZW50UmVnaXN0ZXIo
YXJndW1lbnRDb3VudCsrKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0
b3JGdW5jdGlvbjo6R2VuZXJhdG9yUmVzdW1lTW9kZTo6Tm9ybWFsTW9kZSkpKTsKICAgICAgICAg
Ly8gSlNUZXh0UG9zaXRpb24oaW50IF9saW5lLCBpbnQgX29mZnNldCwgaW50IF9saW5lU3RhcnRP
ZmZzZXQpCiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90KGZpcnN0TGluZSgpLCBzdGFydE9m
ZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJlc3VsdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRDYWxsSW5UYWlsUG9zaXRpb24ocmVzdWx0LmdldCgpLCBzdGFydEFzeW5jRnVuY3Rpb24uZ2V0
KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2b3QsIGRpdm90LCBkaXZvdCwgRGVidWdn
YWJsZUNhbGw6Ok5vKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24o
cmVzdWx0LmdldCgpLCBhc3luY0Z1bmN0aW9uUmVzdW1lLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rp
b24sIGFyZ3MsIGRpdm90LCBkaXZvdCwgZGl2b3QsIERlYnVnZ2FibGVDYWxsOjpObyk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0UmV0dXJuKHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggMmE0YWFmMzljNmU4NGI0ZTBhZmJmNmQyMmJiMDY5Nzg2Yjk3NGQ0NS4uNmM4ZWNlNGMx
ZmRkMTZkYjEwYTQ1YWIwMWMwMzc1ZTM4YTFjYjdlZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNi0xMS0x
NCAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtKU0NdIGRv
IG5vdCByZWZlcmVuY2UgQXdhaXRFeHByZXNzaW9uIFByb21pc2VzIGluIGFzeW5jIGZ1bmN0aW9u
IFByb21pc2UgY2hhaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDc1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogYXN5bmNGdW5jdGlvblRlc3RzLnlhbWw6CisgICAgICAgICogc3RyZXNzL2FzeW5j
LWF3YWl0LWxvbmctbG9vcC5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAg
IChhc3luYy5sb25nTG9vcCk6CisgICAgICAgICogc3RyZXNzL2FzeW5jLWF3YWl0LXRocm93LWxv
b3AuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoYXN5bmMudGhyb3dl
cik6CisgICAgICAgIChhc3luYy50aHJvd0xvb3ApOgorCiAyMDE2LTExLTE0ICBLZWl0aCBNaWxs
ZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBXYXNtIHNlbGVjdApk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9hc3luY0Z1bmN0aW9uVGVzdHMueWFtbCBiL0pTVGVzdHMvYXN5
bmNGdW5jdGlvblRlc3RzLnlhbWwKaW5kZXggMWUzOGJmYjljYzRkMmVhZThkMWFiODhmZDBkMmI3
NTA1N2VlZjMzMy4uNTA3NmRkNWE0ZWRiMGNmOTFmZjIyYjE2NjE1ZGMyZjk4OWM2YjkxZSAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9hc3luY0Z1bmN0aW9uVGVzdHMueWFtbAorKysgYi9KU1Rlc3RzL2Fz
eW5jRnVuY3Rpb25UZXN0cy55YW1sCkBAIC00Myw2ICs0MywxMCBAQAogICBjbWQ6IHJ1bkRlZmF1
bHQKIC0gcGF0aDogc3RyZXNzL2FzeW5jLWF3YWl0LXJlc2VydmVkLXdvcmQuanMKICAgY21kOiBy
dW5EZWZhdWx0CistIHBhdGg6IHN0cmVzcy9hc3luYy1hd2FpdC1sb25nLWxvb3AuanMKKyAgY21k
OiBydW5Ob0NKSVQgIi0tZ2NNYXhIZWFwU2l6ZT0yMDAwMDAwIgorLSBwYXRoOiBzdHJlc3MvYXN5
bmMtYXdhaXQtdGhyb3ctbG9vcC5qcworICBjbWQ6IHJ1bk5vQ0pJVCAiLS1nY01heEhlYXBTaXpl
PTIwMDAwMDAiCiAKICMgRlRMSklUCiAtIHBhdGg6IHN0cmVzcy9hc3luYy1mdW5jdGlvbi1jcmVh
dGUtb3B0aW1pemVkLmpzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC1s
b25nLWxvb3AuanMgYi9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC1sb25nLWxvb3AuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmJkNGFlMDA0ZGY5NzBjNDQwOWQ5ZWY2YWVhZWFjMmQyMTM0MTNiMQotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2FzeW5jLWF3YWl0LWxvbmctbG9vcC5qcwpAQCAt
MCwwICsxLDI4IEBACisvLyBDb3B5cmlnaHQgKEMpIENvcHlyaWdodCAyMDE2IHRoZSB2OCBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKy8vIFRoaXMgdGVzdCByZXF1aXJl
cyBFTkFCTEVfRVMyMDE3X0FTWU5DRlVOQ1RJT05fU1lOVEFYIHRvIGJlIGVuYWJsZWQgYXQgYnVp
bGQgdGltZS4KKy8vQCBza2lwCisvLyBUT0RPOiBAcnVuTm9DSklUKCItLWdjTWF4SGVhcFNpemU9
MjAwMDAwMCIpCisKKworZnVuY3Rpb24gc2hvdWxkQmUoZXhwZWN0ZWQsIGFjdHVhbCwgbXNnID0g
IiIpIHsKKyAgICBpZiAobXNnKQorICAgICAgICBtc2cgPSAiIGZvciAiICsgbXNnOworICAgIGlm
IChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1
ZSIgKyBtc2cgKyAiOiAiICsgYWN0dWFsICsgIi4gRXhwZWN0ZWQgIiArIGV4cGVjdGVkKTsKK30K
KworCitsZXQgb3V0OworCithc3luYyBmdW5jdGlvbiBsb25nTG9vcCgpIHsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDAwOyBpKyspCisgICAgICAgIGF3YWl0IHVuZGVmaW5lZDsKKyAgICBv
dXQgPSAxOworfQorCitsb25nTG9vcCgpOworCitkcmFpbk1pY3JvdGFza3MoKTsKKworc2hvdWxk
QmUob3V0LCAxKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FzeW5jLWF3YWl0LXRocm93
LWxvb3AuanMgYi9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC10aHJvdy1sb29wLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjU2NGJhNjE5YzBkZjAzNDU2NGM1ZjJiYWI0MTBkYmUxMDI3ODQ0NmYKLS0tIC9kZXYv
bnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC10aHJvdy1sb29wLmpzCkBAIC0w
LDAgKzEsMzQgQEAKKy8vIENvcHlyaWdodCAoQykgQ29weXJpZ2h0IDIwMTYgdGhlIHY4IHByb2pl
Y3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworLy8gVGhpcyB0ZXN0IHJlcXVpcmVz
IEVOQUJMRV9FUzIwMTdfQVNZTkNGVU5DVElPTl9TWU5UQVggdG8gYmUgZW5hYmxlZCBhdCBidWls
ZCB0aW1lLgorLy9AIHNraXAKKy8vIFRPRE86IEBydW5Ob0NKSVQoIi0tZ2NNYXhIZWFwU2l6ZT0y
MDAwMDAwIikKKworZnVuY3Rpb24gc2hvdWxkQmUoZXhwZWN0ZWQsIGFjdHVhbCwgbXNnID0gIiIp
IHsKKyAgICBpZiAobXNnKQorICAgICAgICBtc2cgPSAiIGZvciAiICsgbXNnOworICAgIGlmIChh
Y3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCB2YWx1ZSIg
KyBtc2cgKyAiOiAiICsgYWN0dWFsICsgIi4gRXhwZWN0ZWQgIiArIGV4cGVjdGVkKTsKK30KKwor
CitsZXQgb3V0OworCithc3luYyBmdW5jdGlvbiB0aHJvd2VyKCkgeyB0aHJvdyB1bmRlZmluZWQ7
IH0KKworYXN5bmMgZnVuY3Rpb24gdGhyb3dMb29wKCkgeworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgODAwMDsgaSsrKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhd2FpdCB0aHJvd2Vy
KCk7CisgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICB2b2lkIDA7CisgICAg
ICAgIH0KKyAgICB9CisgICAgb3V0ID0gMjsKK30KKwordGhyb3dMb29wKCk7CisKK2RyYWluTWlj
cm90YXNrcygpOworCitzaG91bGRCZShvdXQsIDIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>