<?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>149340</bug_id>
          
          <creation_ts>2015-09-18 03:07:19 -0700</creation_ts>
          <short_desc>Implement type conversion instructions in WebAssembly</short_desc>
          <delta_ts>2015-09-18 14:30:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>146064</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sukolsak Sakshuwong">sukolsak</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1127091</commentid>
    <comment_count>0</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-18 03:07:19 -0700</bug_when>
    <thetext>Implement type conversion instructions in WebAssembly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127095</commentid>
    <comment_count>1</comment_count>
      <attachid>261498</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-18 04:13:31 -0700</bug_when>
    <thetext>Created attachment 261498
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127096</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-18 04:16:32 -0700</bug_when>
    <thetext>Attachment 261498 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WASMFunctionCompiler.h:1000:  JIT_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 7 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>1127144</commentid>
    <comment_count>3</comment_count>
      <attachid>261498</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-09-18 10:09:02 -0700</bug_when>
    <thetext>Comment on attachment 261498
Patch

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

&gt; Source/JavaScriptCore/wasm/WASMFunctionCompiler.h:378
&gt; +    int buildConvertType(int, WASMExpressionType fromType, WASMExpressionType toType, WASMTypeConversion conversion)

Shouldn&apos;t the first argument and return type be of type ContextExpression?

&gt; Source/JavaScriptCore/wasm/WASMFunctionCompiler.h:382
&gt; +            load32(temporaryAddress(m_tempStackTop - 1), GPRInfo::regT0);

Everything looks fine, but I&apos;m unfamiliar with this expression of &quot;temporaryAddress(m_tempStackTop - 1)&quot;.  Just to make sure there is no bug here, can you explain what it means?  Specifically,
1. why is it called a &quot;temporary&quot; address?
2. why is it referring to &quot;m_tempStackTop - 1&quot;?  My interpretation is that you&apos;re operating on the operand at the top of the stack.  Hence, my naive expectation is that you would want &quot;m_tempStackTop&quot; instead?

Can you please clarify?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127209</commentid>
    <comment_count>4</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-18 13:37:15 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 261498 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261498&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WASMFunctionCompiler.h:378
&gt; &gt; +    int buildConvertType(int, WASMExpressionType fromType, WASMExpressionType toType, WASMTypeConversion conversion)
&gt; 
&gt; Shouldn&apos;t the first argument and return type be of type ContextExpression?

ContextExpression is a macro for &quot;typename Context::Expression&quot;. It is only used in the parser. Methods in the parser are templatized and take Context as the template parameter. The current possible Contexts are WASMFunctionSyntaxChecker WASMFunctionCompiler. In the future, we will have WASMFunctionLLVMIRGenerator.

In the context of WASMFunctionSyntaxChecker or WASMFunctionCompiler, Expression is just a typedef of int, because we never use it. In the context of WASMFunctionLLVMIRGenerator, Expression will be a typedef of FTL::LValue (or LLVMValueRef.)

I could use Expression, of course. But that seems to introduce unnecessary indirectness. I use the same design as the JSC parser. For example,

- In parser/SyntaxChecker.h, we have &quot;int createBreakStatement(const JSTokenLocation&amp;, int, int) { return StatementResult; }&quot;

- In parser/ASTBuilder.h, we have &quot;StatementNode* createBreakStatement(const JSTokenLocation&amp; location, const Identifier* ident, const JSTextPosition&amp; start, const JSTextPosition&amp; end)&quot;

&gt; &gt; Source/JavaScriptCore/wasm/WASMFunctionCompiler.h:382
&gt; &gt; +            load32(temporaryAddress(m_tempStackTop - 1), GPRInfo::regT0);
&gt; 
&gt; Everything looks fine, but I&apos;m unfamiliar with this expression of
&gt; &quot;temporaryAddress(m_tempStackTop - 1)&quot;.  Just to make sure there is no bug
&gt; here, can you explain what it means?  Specifically,
&gt; 1. why is it called a &quot;temporary&quot; address?
&gt; 2. why is it referring to &quot;m_tempStackTop - 1&quot;?  My interpretation is that
&gt; you&apos;re operating on the operand at the top of the stack.  Hence, my naive
&gt; expectation is that you would want &quot;m_tempStackTop&quot; instead?
&gt; 
&gt; Can you please clarify?  Thanks.

A WebAssembly call frame consists of [space for callee save registers] + [local variables] + [temporaries] + [padding for slow path calls] + [padding for stack pointer alignment]. We can think of [temporaries] as a stack, where m_tempStackTop is the size of the stack. m_tempStackTop starts from zero, because there is no value there. When there is a value there, temporaries[m_tempStackTop - 1] is the top value of the stack. temporaryAddress(m_tempStackTop - 1) is basically the address of temporaries[m_tempStackTop - 1].

We calculate the maximum size of [temporaries] in the syntax checking phrase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127213</commentid>
    <comment_count>5</comment_count>
      <attachid>261498</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-09-18 13:39:21 -0700</bug_when>
    <thetext>Comment on attachment 261498
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127214</commentid>
    <comment_count>6</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-18 13:42:05 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; temporaryAddress(m_tempStackTop - 1) is basically the address of
&gt; temporaries[m_tempStackTop - 1].

The &quot;temporaryAddress(m_tempStackTop - i)&quot; idiom will go away when I implement peephole optimization. I will need to find where values are stored from the arguments and the return values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127236</commentid>
    <comment_count>7</comment_count>
      <attachid>261498</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-18 14:30:12 -0700</bug_when>
    <thetext>Comment on attachment 261498
Patch

Clearing flags on attachment: 261498

Committed r189984: &lt;http://trac.webkit.org/changeset/189984&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127237</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-18 14:30:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261498</attachid>
            <date>2015-09-18 04:13:31 -0700</date>
            <delta_ts>2015-09-18 14:30:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149340-20150918041402.patch</filename>
            <type>text/plain</type>
            <size>16646</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5OTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDYzMmFmNWY0OTM3NzFiMDBmMTcxMDgzMzlmNDkyYWM4MWExOTM2Li4xY2E3MTRiYjAwYTg5MmEz
MTlkMDI5NDA5YTE3MDY3NjYwYjQxNzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNS0wOS0xOCAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdHlwZSBjb252ZXJzaW9uIGluc3RydWN0aW9u
cyBpbiBXZWJBc3NlbWJseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIHNvbWUgdHlwZSBjb252ZXJzaW9uIGluc3Ry
dWN0aW9ucyBpbiBXZWJBc3NlbWJseS4KKyAgICAgICAgVGhlIFdlYkFzc2VtYmx5IHNwZWMgaGFz
IGEgbG90IG1vcmUgdHlwZSBjb252ZXJzaW9uIGluc3RydWN0aW9ucyB0aGFuCisgICAgICAgIHdo
YXQgYXJlIGF2YWlsYWJsZSBpbiBhc20uanMuWzFdIFdlIG9ubHkgaW1wbGVtZW50IHRoZSBvbmVz
IHRoYXQgYXJlIGluCisgICAgICAgIGFzbS5qcyBmb3Igbm93IGJlY2F1c2Ugd2UgY2FuIG9ubHkg
dGVzdCB0aG9zZS4KKworICAgICAgICBbMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJs
eS9kZXNpZ24vYmxvYi9tYXN0ZXIvQXN0U2VtYW50aWNzLm1kCisKKyAgICAgICAgKiB0ZXN0cy9z
dHJlc3Mvd2FzbS10eXBlLWNvbnZlcnNpb24uanM6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3dh
c20vdHlwZS1jb252ZXJzaW9uLndhc206CisgICAgICAgICogd2FzbS9XQVNNQ29uc3RhbnRzLmg6
CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5oOgorICAgICAgICAoSlNDOjpv
cGVyYXRpb25Db252ZXJ0VW5zaWduZWRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxkQ29udmVydFR5cGUpOgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25Db21waWxlcjo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogd2FzbS9XQVNNRnVu
Y3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNl
RXhwcmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VF
eHByZXNzaW9uRjMyKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4
cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29u
dmVydFR5cGUpOgorICAgICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAg
ICogd2FzbS9XQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkQ29udmVydFR5cGUpOgorCiAyMDE1LTA5LTE3ICBD
b21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMTg5OTM4LCByMTg5OTUyLCBhbmQgcjE4OTk1Ni4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2FzbS10eXBlLWNvbnZlcnNp
b24uanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20tdHlwZS1jb252
ZXJzaW9uLmpzCmluZGV4IDM1YmJmMWQyYzdkNDY5NGNiYWZkNjIwMTA0ZWI5MzhlZGM5Y2Y4MjUu
LmNmOTM4YmE5NzZjZmVkYTVjZDM5YWZlYzZkYzIzZjE5ZGEzMzE3ZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2FzbS10eXBlLWNvbnZlcnNpb24uanMK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLXR5cGUtY29udmVy
c2lvbi5qcwpAQCAtMTcsNiArMTcsNDYgQEAgZnVuY3Rpb24gYXNtTW9kdWxlKGdsb2JhbCwgaW1w
b3J0cywgYnVmZmVyKSB7CiAgICAgdmFyIGdldFN0cmluZyA9IGltcG9ydHMuZ2V0U3RyaW5nOwog
ICAgIHZhciBnZXRCb29sZWFuID0gaW1wb3J0cy5nZXRCb29sZWFuOwogCisgICAgZnVuY3Rpb24g
Y29udmVydEludFRvRmxvYXQoeCkgeworICAgICAgICB4ID0geCB8IDA7CisgICAgICAgIHJldHVy
biBmcm91bmQoeCB8IDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbnZlcnRVbnNpZ25lZElu
dFRvRmxvYXQoeCkgeworICAgICAgICB4ID0geCB8IDA7CisgICAgICAgIHJldHVybiBmcm91bmQo
eCA+Pj4gMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29udmVydEludFRvRG91YmxlKHgpIHsK
KyAgICAgICAgeCA9IHggfCAwOworICAgICAgICByZXR1cm4gKyh4IHwgMCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gY29udmVydFVuc2lnbmVkSW50VG9Eb3VibGUoeCkgeworICAgICAgICB4ID0g
eCB8IDA7CisgICAgICAgIHJldHVybiArKHggPj4+IDApOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGNvbnZlcnRGbG9hdFRvSW50KHgpIHsKKyAgICAgICAgeCA9IGZyb3VuZCh4KTsKKyAgICAgICAg
cmV0dXJuIH5+eDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb252ZXJ0RmxvYXRUb0RvdWJsZSh4
KSB7CisgICAgICAgIHggPSBmcm91bmQoeCk7CisgICAgICAgIHJldHVybiAreDsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBjb252ZXJ0RG91YmxlVG9JbnQoeCkgeworICAgICAgICB4ID0gK3g7Cisg
ICAgICAgIHJldHVybiB+fng7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29udmVydERvdWJsZVRv
RmxvYXQoeCkgeworICAgICAgICB4ID0gK3g7CisgICAgICAgIHJldHVybiBmcm91bmQoeCk7Cisg
ICAgfQorCiAgICAgZnVuY3Rpb24gdGFrZUFuZFJldHVybkludDMyKHgpIHsKICAgICAgICAgeCA9
IHggfCAwOwogICAgICAgICByZXR1cm4geCB8IDA7CkBAIC02NSw2ICsxMDUsMTUgQEAgZnVuY3Rp
b24gYXNtTW9kdWxlKGdsb2JhbCwgaW1wb3J0cywgYnVmZmVyKSB7CiAgICAgfQogCiAgICAgcmV0
dXJuIHsKKyAgICAgICAgY29udmVydEludFRvRmxvYXQ6IGNvbnZlcnRJbnRUb0Zsb2F0LAorICAg
ICAgICBjb252ZXJ0VW5zaWduZWRJbnRUb0Zsb2F0OiBjb252ZXJ0VW5zaWduZWRJbnRUb0Zsb2F0
LAorICAgICAgICBjb252ZXJ0SW50VG9Eb3VibGU6IGNvbnZlcnRJbnRUb0RvdWJsZSwKKyAgICAg
ICAgY29udmVydFVuc2lnbmVkSW50VG9Eb3VibGU6IGNvbnZlcnRVbnNpZ25lZEludFRvRG91Ymxl
LAorICAgICAgICBjb252ZXJ0RmxvYXRUb0ludDogY29udmVydEZsb2F0VG9JbnQsCisgICAgICAg
IGNvbnZlcnRGbG9hdFRvRG91YmxlOiBjb252ZXJ0RmxvYXRUb0RvdWJsZSwKKyAgICAgICAgY29u
dmVydERvdWJsZVRvSW50OiBjb252ZXJ0RG91YmxlVG9JbnQsCisgICAgICAgIGNvbnZlcnREb3Vi
bGVUb0Zsb2F0OiBjb252ZXJ0RG91YmxlVG9GbG9hdCwKKwogICAgICAgICB0YWtlQW5kUmV0dXJu
SW50MzI6IHRha2VBbmRSZXR1cm5JbnQzMiwKICAgICAgICAgdGFrZUFuZFJldHVybkZsb2F0OiB0
YWtlQW5kUmV0dXJuRmxvYXQsCiAgICAgICAgIHRha2VBbmRSZXR1cm5Eb3VibGU6IHRha2VBbmRS
ZXR1cm5Eb3VibGUsCkBAIC04OSw2ICsxMzgsMTUgQEAgdmFyIGltcG9ydHMgPSB7CiB9OwogdmFy
IG1vZHVsZSA9IGxvYWRXZWJBc3NlbWJseSgid2FzbS90eXBlLWNvbnZlcnNpb24ud2FzbSIsIGlt
cG9ydHMpOwogCitzaG91bGRCZShtb2R1bGUuY29udmVydEludFRvRmxvYXQoLTEpLCAtMSk7Citz
aG91bGRCZShtb2R1bGUuY29udmVydFVuc2lnbmVkSW50VG9GbG9hdCgtMSksIDQyOTQ5NjcyOTYp
Oworc2hvdWxkQmUobW9kdWxlLmNvbnZlcnRJbnRUb0RvdWJsZSgtMSksIC0xKTsKK3Nob3VsZEJl
KG1vZHVsZS5jb252ZXJ0VW5zaWduZWRJbnRUb0RvdWJsZSgtMSksIDQyOTQ5NjcyOTUpOworc2hv
dWxkQmUobW9kdWxlLmNvbnZlcnRGbG9hdFRvSW50KDQuMiksIDQpOworc2hvdWxkQmUobW9kdWxl
LmNvbnZlcnRGbG9hdFRvRG91YmxlKDQuMiksIDQuMTk5OTk5ODA5MjY1MTM3KTsKK3Nob3VsZEJl
KG1vZHVsZS5jb252ZXJ0RG91YmxlVG9JbnQoNC4yKSwgNCk7CitzaG91bGRCZShtb2R1bGUuY29u
dmVydERvdWJsZVRvRmxvYXQoNC4yKSwgNC4xOTk5OTk4MDkyNjUxMzcpOworCiB2YXIgdHdvID0g
ewogICAgIHZhbHVlT2YoKSB7IHJldHVybiAyOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtL3R5cGUtY29udmVyc2lvbi53YXNtIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtL3R5cGUtY29udmVyc2lvbi53YXNt
CmluZGV4IDlkNDMxMTIwMGEyZThhNjQwZDBlM2RhNzVjNDUwZDdmZGJlZThmNmQuLjM5YzM5ZGIw
MmU4YWQzOGZhNzAyN2ZiMjNhMDcwYzIzZTMwNjQxMGYgMTAwNjQ0CkdJVCBiaW5hcnkgcGF0Y2gK
bGl0ZXJhbCA2NDQKemNtWnZaTy17b3c1UVdGaWVfRVE5WmpqJjxafl9waiMxX2Z7MD0xJXcpUnRU
cXdqNns3TjlvYStpNj9EaUZfSiVmCnotaSk3fV9eYTclZT0/dyQybXcrNjJxQUdya2JwQyM1PG8o
bng1XzxmY1h0YzJDfl5JMF9IVWl5PGkqKklaYUh9ewp6cmM7Zmt0aGFfbVp5VXUpbiZreVhpMj5p
RG5qSHw7NWpDeEBlLVUlUzRXVDkrYUxgUVMzSjgpQTZIPiVmNUYkY0MKeiRpKDhePXVjKG8hWWl9
dk95ZEFwZGV5czR0SlY2ZkIrazJzQEF8S3VZWjJGYTxDUUB0aHtxQilDYW42QGNjeXtuCnpaPG8y
fEwqNDgzdnZQWkB7ZVI5IW4ociR7OFhyXkkpMl5qOFRmY28wc042Z2FXUFpBZktwcX0oPTVAZE1X
THx8YgpQeVZzJTRfVlo5NXs0ZjZpekhgNj4KCmxpdGVyYWwgNDE4CnpjbVo5SFE0V0dJNDJJalcw
VjJqJSZZPnNKNyFxSWcxVCFxZTJ3UT85eklxZ247KkdxNXRCZXJWcTxgOGs/VnQ3fgp6cFkyeHdn
I1pMWldYSiMqQFUmTDt0bkdkV0VhSSp7bmZ9JSYtJn0yWCpSXmtzI3h6UTU+aSROczBjNFIyP3Qo
RlIKejxNIWluQEwzUWo3enJuZG8jYVJva3FEQiszQyhCZzBkcCVLPlklSE92VkV0PWxWSEtoI3or
Z2VWQUh3WHlqNkNsCm45b002UGBlN2JtfERfMTxebHY9IWFkfGRSTGhSa3NrYkM9OCRTNDB5UnUk
d3dHJSRBfQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Db25z
dGFudHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Db25zdGFudHMuaAppbmRl
eCAxYjk5NDVlMWFjOTYwOTE4ZTEyM2FiZWRkYjVlZmQzNTdiNWZiMTk5Li4zZjZkZDVmYTU4OWEx
YmFkNzc2NTUwNTFmZWY5YzBhNGQ5NmE4NDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUNvbnN0YW50cy5oCkBAIC0yODQsNiArMjg0LDEzIEBAIGVudW0gY2xhc3MgV0FTTUV4
cG9ydEZvcm1hdCA6IHVpbnQ4X3QgewogICAgIE51bWJlck9mRXhwb3J0Rm9ybWF0cwogfTsKIAor
ZW51bSBjbGFzcyBXQVNNVHlwZUNvbnZlcnNpb24geworICAgIENvbnZlcnRTaWduZWQsCisgICAg
Q29udmVydFVuc2lnbmVkLAorICAgIFByb21vdGUsCisgICAgRGVtb3RlLAorfTsKKwogc3RhdGlj
IGNvbnN0IHVpbnQ4X3QgaGFzSW1tZWRpYXRlSW5PcEZsYWcgPSAweDgwOwogCiBzdGF0aWMgY29u
c3QgdW5zaWduZWQgb3BXaXRoSW1tZWRpYXRlQml0cyA9IDI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uQ29tcGlsZXIuaAppbmRleCA4YTJiMWRkYWU4MTIx
MzI5MTk4ZTU2ZGZmNTg3MDA2MDVmNzI4ODEzLi4zNmQ2MWEwNDE0ODRkMDVlMWE2NDJlZTExNmZj
MGUyMWEyMWUyZGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
RnVuY3Rpb25Db21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01G
dW5jdGlvbkNvbXBpbGVyLmgKQEAgLTcxLDYgKzcxLDEzIEBAIHN0YXRpYyB1aW50MzJfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblVuc2lnbmVkTW9kKHVpbnQzMl90IGxlZnQsIHVpbnQzMl90IHJp
Z2h0CiB9CiAjZW5kaWYKIAorI2lmICFVU0UoSlNWQUxVRTY0KQorc3RhdGljIGRvdWJsZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRVbnNpZ25lZEludDMyVG9Eb3VibGUodWludDMyX3Qg
dmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworfQorI2Vu
ZGlmCisKIGNsYXNzIFdBU01GdW5jdGlvbkNvbXBpbGVyIDogcHJpdmF0ZSBDQ2FsbEhlbHBlcnMg
ewogcHVibGljOgogICAgIHR5cGVkZWYgaW50IEV4cHJlc3Npb247CkBAIC0zNjgsNiArMzc1LDY3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVOVVNFRDsKICAgICB9CiAKKyAgICBpbnQgYnVp
bGRDb252ZXJ0VHlwZShpbnQsIFdBU01FeHByZXNzaW9uVHlwZSBmcm9tVHlwZSwgV0FTTUV4cHJl
c3Npb25UeXBlIHRvVHlwZSwgV0FTTVR5cGVDb252ZXJzaW9uIGNvbnZlcnNpb24pCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGZyb21UeXBlKSB7CisgICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25U
eXBlOjpJMzI6CisgICAgICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFj
a1RvcCAtIDEpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBBU1NFUlQodG9UeXBlID09
IFdBU01FeHByZXNzaW9uVHlwZTo6RjMyIHx8IHRvVHlwZSA9PSBXQVNNRXhwcmVzc2lvblR5cGU6
OkY2NCk7CisgICAgICAgICAgICBpZiAoY29udmVyc2lvbiA9PSBXQVNNVHlwZUNvbnZlcnNpb246
OkNvbnZlcnRTaWduZWQpCisgICAgICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoR1BS
SW5mbzo6cmVnVDAsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGNvbnZlcnNpb24gPT0gV0FTTVR5cGVDb252ZXJzaW9uOjpDb252
ZXJ0VW5zaWduZWQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgY29udmVy
dEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OmZwUmVnVDApOworI2Vsc2UK
KyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnRVbnNpZ25lZElu
dDMyVG9Eb3VibGUsIEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyNlbmRpZgor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRvVHlwZSA9PSBXQVNNRXhwcmVzc2lvblR5
cGU6OkYzMikKKyAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpm
cFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlRG91YmxlKEZQUklu
Zm86OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkYzMjoKKyAg
ICAgICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDEp
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIHN3aXRjaCAodG9UeXBlKSB7CisgICAg
ICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6STMyOgorICAgICAgICAgICAgICAgIEFT
U0VSVChjb252ZXJzaW9uID09IFdBU01UeXBlQ29udmVyc2lvbjo6Q29udmVydFNpZ25lZCk7Cisg
ICAgICAgICAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICAgICAgdHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQ
UkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBzdG9yZTMy
KEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5
cGU6OkY2NDoKKyAgICAgICAgICAgICAgICBBU1NFUlQoY29udmVyc2lvbiA9PSBXQVNNVHlwZUNv
bnZlcnNpb246OlByb21vdGUpOworICAgICAgICAgICAgICAgIGNvbnZlcnRGbG9hdFRvRG91Ymxl
KEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgICAgIHN0
b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tU
b3AgLSAxKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQ6Cisg
ICAgICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAx
KSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBzd2l0Y2ggKHRvVHlwZSkgeworICAg
ICAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMjoKKyAgICAgICAgICAgICAgICBB
U1NFUlQoY29udmVyc2lvbiA9PSBXQVNNVHlwZUNvbnZlcnNpb246OkNvbnZlcnRTaWduZWQpOwor
ICAgICAgICAgICAgICAgIHRydW5jYXRlRG91YmxlVG9JbnQzMihGUFJJbmZvOjpmcFJlZ1QwLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwg
dGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDEpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25UeXBlOjpGMzI6CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGNvbnZlcnNpb24gPT0gV0FTTVR5cGVDb252ZXJzaW9uOjpEZW1vdGUp
OworICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OmZwUmVnVDAs
IEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86
OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKwogICAgIGludCBidWlsZFVuYXJ5
STMyKGludCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKICAgICB7CiAgICAgICAgIGxvYWQzMih0
ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEdQUkluZm86OnJlZ1QwKTsKQEAg
LTkyOSw2ICs5OTcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgYXBwZW5kQ2FsbFNldFJlc3VsdChv
cGVyYXRpb24sIGRzdCk7CiAgICAgfQogCisgICAgdm9pZCBjYWxsT3BlcmF0aW9uKGRvdWJsZSBK
SVRfT1BFUkFUSU9OICgqb3BlcmF0aW9uKSh1aW50MzJfdCksIEdQUlJlZyBzcmMsIEZQUmVnaXN0
ZXJJRCBkc3QpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50cyhzcmMpOworICAgICAgICBh
cHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgZHN0LCBGbG9hdGluZ1BvaW50UHJlY2lzaW9u
OjpEb3VibGUpOworICAgIH0KKwogICAgIHZvaWQgYm94QXJndW1lbnRzQW5kQWRqdXN0U3RhY2tQ
b2ludGVyKGNvbnN0IFZlY3RvcjxXQVNNVHlwZT4mIGFyZ3VtZW50cykKICAgICB7CiAgICAgICAg
IHNpemVfdCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLnNpemUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwCmluZGV4IDA3OTU1ZTE3
YzhhNWMwYTYxMzA5MDlhOTc2MzllN2RlZjFmMzdkYjUuLjE3NmU2ZTM1M2RlODg4N2E1NTIzZGRh
ODQ5NDMyN2M0ZTUyYjQ3OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01GdW5jdGlvblBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZ1bmN0aW9uUGFyc2VyLmNwcApAQCAtNTM0LDYgKzUzNCwxMCBAQCBDb250ZXh0RXhwcmVz
c2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250
ZXh0KQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEluZGlyZWN0KGNvbnRleHQsIFdBU01F
eHByZXNzaW9uVHlwZTo6STMyKTsKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpD
YWxsSW1wb3J0OgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEltcG9ydChjb250ZXh0LCBX
QVNNRXhwcmVzc2lvblR5cGU6OkkzMik7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6RnJvbUYzMjoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnZlcnRUeXBlKGNvbnRleHQs
IFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTVR5
cGVDb252ZXJzaW9uOjpDb252ZXJ0U2lnbmVkKTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpGcm9tRjY0OgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udmVydFR5cGUoY29u
dGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBX
QVNNVHlwZUNvbnZlcnNpb246OkNvbnZlcnRTaWduZWQpOwogICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6Ok5lZ2F0ZToKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpC
aXROb3Q6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q291bnRMZWFkaW5nWmVy
b3M6CkBAIC01OTksOCArNjAzLDYgQEAgQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFy
c2VyOjpwYXJzZUV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCkKICAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uSTMyOjpTdG9yZVdpdGhPZmZzZXQzMjoKICAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpDb25kaXRpb25hbDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpDb21tYToKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpGcm9tRjMy
OgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkZyb21GNjQ6CiAgICAgICAgIGNh
c2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U01pbjoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpVTWluOgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNNYXg6CkBA
IC03NTAsNiArNzUyLDEyIEBAIENvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6
cGFyc2VFeHByZXNzaW9uRjMyKENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4g
cGFyc2VDYWxsSW50ZXJuYWwoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpGMzIpOwogICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkNhbGxJbmRpcmVjdDoKICAgICAgICAgICAg
IHJldHVybiBwYXJzZUNhbGxJbmRpcmVjdChjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkYz
Mik7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6RnJvbVMzMjoKKyAgICAgICAg
ICAgIHJldHVybiBwYXJzZUNvbnZlcnRUeXBlKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6
STMyLCBXQVNNRXhwcmVzc2lvblR5cGU6OkYzMiwgV0FTTVR5cGVDb252ZXJzaW9uOjpDb252ZXJ0
U2lnbmVkKTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpGcm9tVTMyOgorICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlQ29udmVydFR5cGUoY29udGV4dCwgV0FTTUV4cHJlc3Npb25U
eXBlOjpJMzIsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBXQVNNVHlwZUNvbnZlcnNpb246OkNv
bnZlcnRVbnNpZ25lZCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6RnJvbUY2
NDoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnZlcnRUeXBlKGNvbnRleHQsIFdBU01FeHBy
ZXNzaW9uVHlwZTo6RjY0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkYzMiwgV0FTTVR5cGVDb252ZXJz
aW9uOjpEZW1vdGUpOwogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6Ok5lZ2F0ZToK
ICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpBYnM6CiAgICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkYzMjo6Q2VpbDoKQEAgLTc2OSw5ICs3NzcsNiBAQCBDb250ZXh0RXhwcmVz
c2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkYzMihDb250ZXh0JiBjb250
ZXh0KQogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OlN0b3JlV2l0aE9mZnNldDoK
ICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpDb25kaXRpb25hbDoKICAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpDb21tYToKLSAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uRjMyOjpGcm9tUzMyOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkZy
b21VMzI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6RnJvbUY2NDoKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlc2UgaW5zdHJ1Y3Rpb25zLgogICAgICAgICAg
ICAgRkFJTF9XSVRIX01FU1NBR0UoIlVuc3VwcG9ydGVkIGluc3RydWN0aW9uLiIpOwogICAgICAg
ICBkZWZhdWx0OgpAQCAtODgxLDYgKzg4NiwxMiBAQCBDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVu
Y3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkY2NChDb250ZXh0JiBjb250ZXh0KQogICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlQ2FsbEltcG9ydChjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6
OkY2NCk7CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Q2FsbEluZGlyZWN0Ogog
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEluZGlyZWN0KGNvbnRleHQsIFdBU01FeHByZXNz
aW9uVHlwZTo6RjY0KTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpGcm9tUzMy
OgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udmVydFR5cGUoY29udGV4dCwgV0FTTUV4cHJl
c3Npb25UeXBlOjpJMzIsIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0LCBXQVNNVHlwZUNvbnZlcnNp
b246OkNvbnZlcnRTaWduZWQpOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkZy
b21VMzI6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VDb252ZXJ0VHlwZShjb250ZXh0LCBXQVNN
RXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdBU01UeXBlQ29u
dmVyc2lvbjo6Q29udmVydFVuc2lnbmVkKTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
RjY0OjpGcm9tRjMyOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udmVydFR5cGUoY29udGV4
dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpGMzIsIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0LCBXQVNN
VHlwZUNvbnZlcnNpb246OlByb21vdGUpOwogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
NjQ6OlNldExvY2FsOgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlNldEdsb2Jh
bDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpMb2FkOgpAQCAtODg5LDkgKzkw
MCw2IEBAIENvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNz
aW9uRjY0KENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2
NDo6U3RvcmVXaXRoT2Zmc2V0OgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNv
bmRpdGlvbmFsOgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNvbW1hOgotICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkZyb21TMzI6Ci0gICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkY2NDo6RnJvbVUzMjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
RjY0OjpGcm9tRjMyOgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6Ok5lZ2F0ZToK
ICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpBZGQ6CiAgICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkY2NDo6U3ViOgpAQCAtMTA0MCw2ICsxMDQ4LDE1IEBAIENvbnRleHRFeHBy
ZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW1wb3J0KENvbnRleHQmIGNvbnRl
eHQsIFdBU01FeHByCiAgICAgcmV0dXJuIGNvbnRleHQuYnVpbGRDYWxsSW1wb3J0KGZ1bmN0aW9u
SW1wb3J0U2lnbmF0dXJlLmZ1bmN0aW9uSW1wb3J0SW5kZXgsIGFyZ3VtZW50TGlzdCwgc2lnbmF0
dXJlLCByZXR1cm5UeXBlKTsKIH0KIAordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0
RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29udmVydFR5cGUoQ29udGV4dCYg
Y29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlIGZyb21UeXBlLCBXQVNNRXhwcmVzc2lvblR5cGUg
dG9UeXBlLCBXQVNNVHlwZUNvbnZlcnNpb24gY29udmVyc2lvbikKK3sKKyAgICBDb250ZXh0RXhw
cmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQsIGZyb21UeXBlKTsK
KyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKworICAgIHJldHVybiBjb250ZXh0LmJ1aWxkQ29udmVy
dFR5cGUoZXhwcmVzc2lvbiwgZnJvbVR5cGUsIHRvVHlwZSwgY29udmVyc2lvbik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaAppbmRleCBiYmJk
MTNkYmQxOGNkMGU2ZDI2OGQxOTcyODJkMGUzNWI1ZmVhODU4Li5mNmM5YTc2MDcwM2JjYjU5MGYw
NWEyYTYzYzgxZDBmZjQ4NjBjYzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRnVuY3Rpb25QYXJzZXIuaApAQCAtMTE3LDYgKzExNyw3IEBAIHByaXZhdGU6CiAgICAg
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbEludGVy
bmFsKENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSk7CiAgICAgdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbEluZGlyZWN0KENv
bnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSk7CiAgICAgdGVtcGxhdGUgPGNs
YXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbEltcG9ydChDb250ZXh0Jiwg
V0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNvbnZlcnRUeXBlKENvbnRleHQmLCBXQVNNRXhw
cmVzc2lvblR5cGUgZnJvbVR5cGUsIFdBU01FeHByZXNzaW9uVHlwZSB0b1R5cGUsIFdBU01UeXBl
Q29udmVyc2lvbik7CiAKICAgICBKU1dBU01Nb2R1bGUqIG1fbW9kdWxlOwogICAgIFdBU01SZWFk
ZXIgbV9yZWFkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
RnVuY3Rpb25TeW50YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
RnVuY3Rpb25TeW50YXhDaGVja2VyLmgKaW5kZXggNjI4NjNkNGU3NTA1NWY0MDQ4NmVkOWQ1MzZm
ZmVhOTk3ODZjMjliMS4uMmQzYjJjMjc2NWI1ODQ0MDdhMTA4MjUxNTk0ZWQyNWM0MTM4OGQ5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uU3ludGF4
Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblN5
bnRheENoZWNrZXIuaApAQCAtMTAxLDYgKzEwMSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBVTlVTRUQ7CiAgICAgfQogCisgICAgaW50IGJ1aWxkQ29udmVydFR5cGUoaW50LCBXQVNNRXhw
cmVzc2lvblR5cGUsIFdBU01FeHByZXNzaW9uVHlwZSwgV0FTTVR5cGVDb252ZXJzaW9uKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKICAgICBpbnQgYnVpbGRVbmFyeUkz
MihpbnQsIFdBU01PcEV4cHJlc3Npb25JMzIpCiAgICAgewogICAgICAgICByZXR1cm4gVU5VU0VE
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>