<?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>218646</bug_id>
          
          <creation_ts>2020-11-05 21:05:56 -0800</creation_ts>
          <short_desc>Use address diversified PAC to ensure the integrity of opcode maps.</short_desc>
          <delta_ts>2020-11-06 07:51:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1705126</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-11-05 21:05:56 -0800</bug_when>
    <thetext>One reason for doing this is because space in the JSCConfig is premium, and may hurt RAMification scores whenever we add new opcodes.  My putting the opcode maps in dirty global memory, we still use less memory because dirty global memory does not incur internal fragmentation like the JSConfig does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705132</commentid>
    <comment_count>1</comment_count>
      <attachid>413403</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-11-05 21:46:34 -0800</bug_when>
    <thetext>Created attachment 413403
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705139</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-11-05 22:30:54 -0800</bug_when>
    <thetext>The following LLInt asm:

    macro nextInstruction()
        loadb [PB, PC, 1], t0                                       // line 331 or 332
        leap _g_opcodeMap, t1
        jmp [t1, t0, PtrSize], BytecodePtrTag, AddressDiversified   // line 333 or 334
    end

... used to compile to:


    // JavaScriptCore/llint/LowLevelInterpreter.asm:331
    &quot;\tadd x16, x26, x4, lsl #0\n&quot;
    &quot;\tldrb w0, [x16, #0]\n&quot;                                 // JavaScriptCore/llint/LowLevelInterpreter.asm:331
#if OS(DARWIN)
    &quot;\tL_offlineasm_loh_adrp_7:\n&quot;                           // JavaScriptCore/llint/LowLevelInterpreter.asm:1
    &quot;\tadrp x16, &quot; LOCAL_REFERENCE(g_config) &quot;@GOTPAGE\n&quot;
    &quot;\tL_offlineasm_loh_ldr_7:\n&quot;
    &quot;\tldr x16, [x16, &quot; LOCAL_REFERENCE(g_config) &quot;@GOTPAGEOFF]\n&quot;
#elif OS(LINUX)
    &quot;\tadrp x16, :got:&quot; LOCAL_REFERENCE(g_config) &quot;\n&quot;
    &quot;\tldr x16, [x16, :got_lo12:&quot; LOCAL_REFERENCE(g_config) &quot;]\n&quot;
#else
#error Missing globaladdr implementation
#endif
    &quot;\tadd x1, x16, #2848\n&quot;                                 // JavaScriptCore/llint/LowLevelInterpreter.asm:1
    &quot;\tmovz x16, #6578, lsl #0\n&quot;                            // JavaScriptCore/llint/LowLevelInterpreter.asm:333
    &quot;\tadd x13, x1, x0, lsl #3\n&quot;                            // JavaScriptCore/llint/LowLevelInterpreter.asm:333
    &quot;\tldr x17, [x13, #0]\n&quot;                                 // JavaScriptCore/llint/LowLevelInterpreter.asm:333
    &quot;\tmov x13, x16\n&quot;                                       // JavaScriptCore/llint/LowLevelInterpreter.asm:333
    &quot;\tbrab x17, x13\n&quot;                                      // JavaScriptCore/llint/LowLevelInterpreter.asm:333


... now compiles to:

    &quot;\tadd x13, x26, x4, lsl #0\n&quot;
    &quot;\tldrb w0, [x13, #0]\n&quot;                                 // JavaScriptCore/llint/LowLevelInterpreter.asm:332
#if OS(DARWIN)
    &quot;\tL_offlineasm_loh_adrp_8:\n&quot;                           // JavaScriptCore/llint/LowLevelInterpreter.asm:1
    &quot;\tadrp x1, &quot; LOCAL_REFERENCE(g_opcodeMap) &quot;@GOTPAGE\n&quot;
    &quot;\tL_offlineasm_loh_ldr_8:\n&quot;
    &quot;\tldr x1, [x1, &quot; LOCAL_REFERENCE(g_opcodeMap) &quot;@GOTPAGEOFF]\n&quot;
#elif OS(LINUX)
    &quot;\tadrp x1, :got:&quot; LOCAL_REFERENCE(g_opcodeMap) &quot;\n&quot;
    &quot;\tldr x1, [x1, :got_lo12:&quot; LOCAL_REFERENCE(g_opcodeMap) &quot;]\n&quot;
#else
#error Missing globaladdr implementation
#endif
    &quot;\tadd x13, x1, x0, lsl #3\n&quot;                            // JavaScriptCore/llint/LowLevelInterpreter.asm:334
    &quot;\tldr x17, [x13, #0]\n&quot;                                 // JavaScriptCore/llint/LowLevelInterpreter.asm:334
    &quot;\tmovz x16, #6578, lsl #48\n&quot;                           // JavaScriptCore/llint/LowLevelInterpreter.asm:334
    &quot;\teor x16, x16, x13\n&quot;                                  // JavaScriptCore/llint/LowLevelInterpreter.asm:334
    &quot;\tbrab x17, x16\n&quot;                                      // JavaScriptCore/llint/LowLevelInterpreter.asm:334</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705143</commentid>
    <comment_count>3</comment_count>
      <attachid>413403</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-11-05 22:59:54 -0800</bug_when>
    <thetext>Comment on attachment 413403
proposed patch.

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

r=me

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

Yes. For example, we need to add bunch of wasm opcodes more. And this soon exceeds the size of JSC::Config even in macOS. And increasing this size immediately becomes 1% regression in RAMiciation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705234</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-06 07:50:53 -0800</bug_when>
    <thetext>Committed r269511: &lt;https://trac.webkit.org/changeset/269511&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 413403.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705235</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-06 07:51:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/71119131&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413403</attachid>
            <date>2020-11-05 21:46:34 -0800</date>
            <delta_ts>2020-11-06 07:50:53 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-218646.patch</filename>
            <type>text/plain</type>
            <size>29364</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjY5NTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDIwLTExLTA1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBV
c2UgYWRkcmVzcyBkaXZlcnNpZmllZCBQQUMgdG8gZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2Ygb3Bj
b2RlIG1hcHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTg2NDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBPbmUgcmVhc29uIGZvciBkb2luZyB0aGlzIGlzIGJlY2F1c2Ugc3BhY2UgaW4gdGhlIEpTQ0Nv
bmZpZyBpcyBsaW1pdGVkLCBhbmQgbWF5CisgICAgICAgIGh1cnQgUkFNaWZpY2F0aW9uIHNjb3Jl
cyBpZiB3ZSBuZWVkIHRvIGV4cGFuZCBpdCB3aGVuIGFkZGluZyBuZXcgb3Bjb2Rlcy4KKyAgICAg
ICAgQnkgcHV0dGluZyB0aGUgb3Bjb2RlIG1hcHMgaW4gZGlydHkgZ2xvYmFsIG1lbW9yeSwgd2Ug
c3RpbGwgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGJlY2F1c2UgZGlydHkgZ2xvYmFsIG1lbW9y
eSBkb2VzIG5vdCBpbmN1ciBpbnRlcm5hbCBmcmFnbWVudGF0aW9uIGxpa2UgdGhlCisgICAgICAg
IEpTQ0NvbmZpZyBkb2VzLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlIG1vdmUgZ19qc2ND
b25maWcubGxpbnQub3Bjb2RlTWFwLCBnX2pzY0NvbmZpZy5sbGludC5vcGNvZGVNYXBXaWRlMTYs
CisgICAgICAgIGFuZCBnX2pzY0NvbmZpZy5sbGludC5vcGNvZGVNYXBXaWRlMzIgYmFjayB0byBn
bG9iYWwgYXJyYXlzIGdfb3Bjb2RlTWFwLCBnX29wY29kZU1hcFdpZGUxNiwKKyAgICAgICAgYW5k
IGdfb3Bjb2RlTWFwV2lkZTMyLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpnZXRPcGNvZGVJRCk6CisgICAg
ICAgIC0gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgZGVidWdnaW5nIHB1cnBvc2Vz
IGR1cmluZyBkZXZlbG9wbWVudCwgYW5kIGlzCisgICAgICAgICAgY3VycmVudGx5IHVudXNlZCwg
d2UgY2FuIGp1c3Qgc3RyaXAgdGhlIFBBQyBiaXRzIGZyb20gdGhlIG9wY29kZSB3aGVuIGNvbXB1
dGluZworICAgICAgICAgIHRoZSBvcGNvZGVJRC4gIFRoZSBhbHRlcm5hdGl2ZSB0byBkb2luZyB0
aGlzIHJlcXVpcmVzIHRoYXQgd2Uga25vdyBob3cgdGhlCisgICAgICAgICAgT3Bjb2RlIGlzIHNp
Z25lZCBieSB0aGUgY2xpZW50LiAgU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgdW51
c2VkLCB3ZQorICAgICAgICAgIGhhdmUgbm8gY2xpZW50cyB0byBzdHVkeSAvIGZpeCB1cCBmb3Ig
bm93LgorCisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJ
bnQ6OmluaXRpYWxpemUpOgorICAgICAgICAtIENoYW5nZWQgYW4gQVNTRVJUIGZvciBsbGludF90
aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lIHRvIHN0YXRpY19hc3NlcnQsCisgICAgICAg
ICAgYW5kIGFkZCBhIHNlY29uZCBvbmUgYXMgd2VsbCBmb3Igd2FzbV90aHJvd19mcm9tX3Nsb3df
cGF0aF90cmFtcG9saW5lLgorICAgICAgICAtIE1vdmVkIHRoZSBzaWduaW5nIG9mIHRoZSBPcGNv
ZGUgcG9pbnRlcnMgaW50byBsbGludF9lbnRyeSgpIGFuZCB3YXNtX2VudHJ5KCkKKyAgICAgICAg
ICBpbnN0ZWFkLiAgTm93LCBub24tQVJNNjRFIHBvcnRzIGRvbid0IG5lZWQgdG8gZXhlY3V0ZSB0
aGlzIG5vLW9wIGFzc2lnbm1lbnQgbG9vcAorICAgICAgICAgIChhc3N1bWluZyBpdCB3YXNuJ3Qg
YWxyZWFkeSBlbGlkZWQgYnkgdGhlIGNvbXBpbGVyKS4KKworICAgICAgICAqIGxsaW50L0xMSW50
RGF0YS5oOgorICAgICAgICAoSlNDOjpMTEludDo6b3Bjb2RlTWFwKToKKyAgICAgICAgKEpTQzo6
TExJbnQ6Om9wY29kZU1hcFdpZGUxNik6CisgICAgICAgIChKU0M6OkxMSW50OjpvcGNvZGVNYXBX
aWRlMzIpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0T3Bjb2RlKToKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmdldE9wY29kZVdpZGUxNik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRPcGNvZGVX
aWRlMzIpOgorICAgICAgICAtIENoYW5nZSBnZXRPcGNvZGUoKSwgZ2V0T3Bjb2RlV2lkZTE2KCks
IGFuZCBnZXRPcGNvZGVXaWRlMzIoKSB0byByZXR1cm4gYSByZWZlcmVuY2UKKyAgICAgICAgICB0
byB0aGUgZW50cnkgaW4gdGhlIGNvcnJlc3BvbmRpbmcgb3Bjb2RlIG1hcC4gIFRoaXMgaXMgbmVl
ZGVkIGJlY2F1c2Ugd2UgbmVlZCB0bworICAgICAgICAgIGJlIGFibGUgdG8gY29tcHV0ZSB0aGUg
YWRkcmVzcyBvZiB0aGUgT3Bjb2RlIGVudHJ5IGluIG9yZGVyIHRvIHJldGFnIHRoZSBPcGNvZGUu
CisKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdldENvZGVQdHJJbXBsKToKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmdldENvZGVQdHIpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0V2lkZTE2Q29kZVB0
cik6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRXaWRlMzJDb2RlUHRyKToKKworICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIGxsaW50L1dlYkFzc2Vt
Ymx5LmFzbToKKyAgICAgICAgLSBDaGFuZ2VkIHRoZSBieXRlY29kZSBkaXNwYXRjaCBgam1wYHMg
dG8gdXNlIGFkZHJlc3MgZGl2ZXJzaWZpY2F0aW9uIHdoZW4KKyAgICAgICAgICBhdXRoZW50aWNh
dGluZyB0aGUgT3Bjb2RlIHBvaW50ZXIuCisgICAgICAgIC0gQ2hhbmdlZCBsbGludF9lbnRyeSBh
bmQgd2FzbV9lbnRyeSB0byBhbHNvIHRhZyB0aGUgT3Bjb2RlIHBvaW50ZXJzIGZvciBBUk02NEUu
CisgICAgICAgIC0gQ2hhbmdlZCBsbGludF9lbnRyeSBhbmQgd2FzbV9lbnRyeSB0byB2YWxpZGF0
ZSB0aGF0IHRoZXkgYXJlIG9ubHkgY2FsbGVkIGR1cmluZworICAgICAgICAgIHN5c3RlbSBpbml0
aWFsaXphdGlvbi4KKworICAgICAgICAqIG9mZmxpbmVhc20vYXJtNjQucmI6CisgICAgICAgIC0g
T3B0aW1pemUgYGxlYXBgIGNvZGUgZ2VuZXJhdGlvbiB0byBlbGlkZSBhbiBhZGQgaW5zdHJ1Y3Rp
b24gaWYgaXQncyBvbmx5IGFkZGluZworICAgICAgICAgIDAgdG8gYSBnbG9iYWwgYWRkcmVzcy4K
KworICAgICAgICAqIG9mZmxpbmVhc20vYXJtNjRlLnJiOgorICAgICAgICAqIG9mZmxpbmVhc20v
YXN0LnJiOgorICAgICAgICAqIG9mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiOgorICAgICAgICAt
IEFkZGVkIHN1cHBvcnQgZm9yIGptcCBvciBjYWxsIHVzaW5nIGFkZHJlc3MgZGl2ZXJzaWZpZWQg
cG9pbnRlcnMuCisgICAgICAgIC0gQWRkZWQgYSB0YWdDb2RlUHRyIGluc3RydWN0aW9uIHRoYXQg
YWxzbyBzdXBwb3J0cyBzaWduaW5nIGFkZHJlc3MgZGl2ZXJzaWZpZWQgcG9pbnRlcnMuCisKKyAg
ICAgICAgKiBydW50aW1lL0pTQ0NvbmZpZy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDUHRyVGFn
Lmg6CisgICAgICAgIChKU0M6OnVudGFnQWRkcmVzc0RpdmVyc2lmaWVkQ29kZVB0cik6CisgICAg
ICAgIC0gQWRkZWQgdW50YWdBZGRyZXNzRGl2ZXJzaWZpZWRDb2RlUHRyKCkgc28gdGhhdCB3ZSBj
YW4gcmV0YWcgdGhlIE9wY29kZSBwb2ludGVycy4KKwogMjAyMC0xMS0wNSAgRG9uIE9sbXN0ZWFk
ICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIE5vbi11bmlmaWVkIGJ1aWxkIGZp
eGVzLCBlYXJseSBOb3ZlbWJlciAyMDIwIGVkaXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDI2OTQxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw2ICs0NSw5IEBAIGlubGlu
ZSBPcGNvZGUgSW50ZXJwcmV0ZXI6OmdldE9wY29kZShPcGMKICAgICByZXR1cm4gTExJbnQ6Omdl
dE9wY29kZShpZCk7CiB9CiAKKy8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgYXMg
YSBkZWJ1Z2dpbmcgdG9vbCBmb3IgZGV2ZWxvcG1lbnQgd29yay4KKy8vIEl0IGlzIG5vdCBjdXJy
ZW50bHkgdXNlZCBleGNlcHQgaW4gYSBSRUxFQVNFX0FTU0VSVCB0byBlbnN1cmUgdGhhdCBpdCBp
cworLy8gd29ya2luZyBwcm9wZXJseS4KIGlubGluZSBPcGNvZGVJRCBJbnRlcnByZXRlcjo6Z2V0
T3Bjb2RlSUQoT3Bjb2RlIG9wY29kZSkKIHsKICNpZiBFTkFCTEUoQ09NUFVURURfR09UT19PUENP
REVTKQpAQCAtNTMsMTUgKzU2LDE1IEBAIGlubGluZSBPcGNvZGVJRCBJbnRlcnByZXRlcjo6Z2V0
T3Bjb2RlSUQKICAgICAvLyBUaGUgT3Bjb2RlSUQgaXMgZW1iZWRkZWQgaW4gdGhlIGludDMyX3Qg
d29yZCBwcmVjZWRpbmcgdGhlIGxvY2F0aW9uIG9mCiAgICAgLy8gdGhlIExMSW50IGNvZGUgZm9y
IHRoZSBvcGNvZGUgKHNlZSB0aGUgRU1CRURfT1BDT0RFX0lEX0lGX05FRURFRCBtYWNybwogICAg
IC8vIGluIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwKS4KLSAgICBhdXRvIGNvZGVQdHIgPSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8Qnl0ZWNvZGVQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFk
ZHJlc3Mob3Bjb2RlKTsKLSAgICBpbnQzMl90KiBvcGNvZGVJREFkZHJlc3MgPSBjb2RlUHRyLmRh
dGFMb2NhdGlvbjxpbnQzMl90Kj4oKSAtIDE7CisgICAgY29uc3Qgdm9pZCogb3Bjb2RlQWRkcmVz
cyA9IHJlbW92ZUNvZGVQdHJUYWcoYml0d2lzZV9jYXN0PGNvbnN0IHZvaWQqPihvcGNvZGUpKTsK
KyAgICBjb25zdCBpbnQzMl90KiBvcGNvZGVJREFkZHJlc3MgPSBiaXR3aXNlX2Nhc3Q8aW50MzJf
dCo+KG9wY29kZUFkZHJlc3MpIC0gMTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IHN0YXRpY19j
YXN0PE9wY29kZUlEPihXVEY6OnVuYWxpZ25lZExvYWQ8aW50MzJfdD4ob3Bjb2RlSURBZGRyZXNz
KSk7CiAgICAgQVNTRVJUKG9wY29kZUlEIDwgTlVNQkVSX09GX0JZVEVDT0RFX0lEUyk7CiAgICAg
cmV0dXJuIG9wY29kZUlEOwogI2Vsc2UKICAgICByZXR1cm4gb3Bjb2RlSURUYWJsZSgpLmdldChv
cGNvZGUpOwogI2VuZGlmIC8vIEVOQUJMRShMTElOVF9FTUJFRERFRF9PUENPREVfSUQpCi0gICAg
CisKICNlbHNlIC8vIG5vdCBFTkFCTEUoQ09NUFVURURfR09UT19PUENPREVTKQogICAgIHJldHVy
biBvcGNvZGU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dERhdGEuY3BwCShyZXZpc2lvbiAyNjk0MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBMTEludCB7CiAKK09wY29kZSBnX29wY29kZU1hcFtudW1P
cGNvZGVJRHMgKyBudW1XYXNtT3Bjb2RlSURzXSA9IHsgfTsKK09wY29kZSBnX29wY29kZU1hcFdp
ZGUxNltudW1PcGNvZGVJRHMgKyBudW1XYXNtT3Bjb2RlSURzXSA9IHsgfTsKK09wY29kZSBnX29w
Y29kZU1hcFdpZGUzMltudW1PcGNvZGVJRHMgKyBudW1XYXNtT3Bjb2RlSURzXSA9IHsgfTsKKwog
I2lmICFFTkFCTEUoQ19MT09QKQogZXh0ZXJuICJDIiB2b2lkIGxsaW50X2VudHJ5KHZvaWQqLCB2
b2lkKiwgdm9pZCopOwogCkBAIC02NiwxOSArNzAsMTQgQEAgdm9pZCBpbml0aWFsaXplKCkKIAog
I2Vsc2UgLy8gIUVOQUJMRShDX0xPT1ApCiAKLSAgICBsbGludF9lbnRyeSgmZ19qc2NDb25maWcu
bGxpbnQub3Bjb2RlTWFwLCAmZ19qc2NDb25maWcubGxpbnQub3Bjb2RlTWFwV2lkZTE2LCAmZ19q
c2NDb25maWcubGxpbnQub3Bjb2RlTWFwV2lkZTMyKTsKKyAgICBsbGludF9lbnRyeSgmZ19vcGNv
ZGVNYXAsICZnX29wY29kZU1hcFdpZGUxNiwgJmdfb3Bjb2RlTWFwV2lkZTMyKTsKIAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKLSAgICB3YXNtX2VudHJ5KCZnX2pzY0NvbmZpZy5sbGludC5vcGNv
ZGVNYXBbbnVtT3Bjb2RlSURzXSwgJmdfanNjQ29uZmlnLmxsaW50Lm9wY29kZU1hcFdpZGUxNltu
dW1PcGNvZGVJRHNdLCAmZ19qc2NDb25maWcubGxpbnQub3Bjb2RlTWFwV2lkZTMyW251bU9wY29k
ZUlEc10pOworICAgIHdhc21fZW50cnkoJmdfb3Bjb2RlTWFwW251bU9wY29kZUlEc10sICZnX29w
Y29kZU1hcFdpZGUxNltudW1PcGNvZGVJRHNdLCAmZ19vcGNvZGVNYXBXaWRlMzJbbnVtT3Bjb2Rl
SURzXSk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1PcGNvZGVJRHMgKyBudW1XYXNtT3Bjb2RlSURzOyArK2kpIHsKLSAgICAgICAg
Z19qc2NDb25maWcubGxpbnQub3Bjb2RlTWFwW2ldID0gdGFnQ29kZVB0cjxCeXRlY29kZVB0clRh
Zz4oZ19qc2NDb25maWcubGxpbnQub3Bjb2RlTWFwW2ldKTsKLSAgICAgICAgZ19qc2NDb25maWcu
bGxpbnQub3Bjb2RlTWFwV2lkZTE2W2ldID0gdGFnQ29kZVB0cjxCeXRlY29kZVB0clRhZz4oZ19q
c2NDb25maWcubGxpbnQub3Bjb2RlTWFwV2lkZTE2W2ldKTsKLSAgICAgICAgZ19qc2NDb25maWcu
bGxpbnQub3Bjb2RlTWFwV2lkZTMyW2ldID0gdGFnQ29kZVB0cjxCeXRlY29kZVB0clRhZz4oZ19q
c2NDb25maWcubGxpbnQub3Bjb2RlTWFwV2lkZTMyW2ldKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
bGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSA8IFVJTlQ4X01BWCk7CisgICAg
c3RhdGljX2Fzc2VydChsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lIDwgVUlO
VDhfTUFYKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHdhc21fdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJh
bXBvbGluZSA8IFVJTlQ4X01BWCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heE9w
Y29kZUxlbmd0aCArIDE7ICsraSkgewogICAgICAgICBnX2pzY0NvbmZpZy5sbGludC5leGNlcHRp
b25JbnN0cnVjdGlvbnNbaV0gPSBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5l
OwogICAgICAgICBnX2pzY0NvbmZpZy5sbGludC53YXNtRXhjZXB0aW9uSW5zdHJ1Y3Rpb25zW2ld
ID0gd2FzbV90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAkocmV2aXNpb24gMjY5NDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0MywxMCBAQCB0eXBlZGVmIHZvaWQgKCpMTEludENvZGUpKCk7CiAKIG5hbWVzcGFjZSBMTElu
dCB7CiAKK2V4dGVybiAiQyIgSlNfRVhQT1JUX1BSSVZBVEUgT3Bjb2RlIGdfb3Bjb2RlTWFwW251
bU9wY29kZUlEcyArIG51bVdhc21PcGNvZGVJRHNdOworZXh0ZXJuICJDIiBKU19FWFBPUlRfUFJJ
VkFURSBPcGNvZGUgZ19vcGNvZGVNYXBXaWRlMTZbbnVtT3Bjb2RlSURzICsgbnVtV2FzbU9wY29k
ZUlEc107CitleHRlcm4gIkMiIEpTX0VYUE9SVF9QUklWQVRFIE9wY29kZSBnX29wY29kZU1hcFdp
ZGUzMltudW1PcGNvZGVJRHMgKyBudW1XYXNtT3Bjb2RlSURzXTsKKwogY2xhc3MgRGF0YSB7CiAK
IHB1YmxpYzoKQEAgLTU2LDkgKzYwLDkgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgT3Bjb2RlKiBv
cGNvZGVNYXAoKTsKICAgICBmcmllbmQgT3Bjb2RlKiBvcGNvZGVNYXBXaWRlMTYoKTsKICAgICBm
cmllbmQgT3Bjb2RlKiBvcGNvZGVNYXBXaWRlMzIoKTsKLSAgICBmcmllbmQgT3Bjb2RlIGdldE9w
Y29kZShPcGNvZGVJRCk7Ci0gICAgZnJpZW5kIE9wY29kZSBnZXRPcGNvZGVXaWRlMTYoT3Bjb2Rl
SUQpOwotICAgIGZyaWVuZCBPcGNvZGUgZ2V0T3Bjb2RlV2lkZTMyKE9wY29kZUlEKTsKKyAgICBm
cmllbmQgY29uc3QgT3Bjb2RlJiBnZXRPcGNvZGUoT3Bjb2RlSUQpOworICAgIGZyaWVuZCBjb25z
dCBPcGNvZGUmIGdldE9wY29kZVdpZGUxNihPcGNvZGVJRCk7CisgICAgZnJpZW5kIGNvbnN0IE9w
Y29kZSYgZ2V0T3Bjb2RlV2lkZTMyKE9wY29kZUlEKTsKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PiBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihPcGNvZGVJRCk7
CiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4gZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0
YWc+IGdldFdpZGUxNkNvZGVQdHIoT3Bjb2RlSUQpOwogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+
IGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBnZXRXaWRlMzJDb2RlUHRyKE9wY29k
ZUlEKTsKQEAgLTc5LDQyICs4Myw0MiBAQCBpbmxpbmUgSW5zdHJ1Y3Rpb24qIHdhc21FeGNlcHRp
b25JbnN0cnVjCiAKIGlubGluZSBPcGNvZGUqIG9wY29kZU1hcCgpCiB7Ci0gICAgcmV0dXJuIGdf
anNjQ29uZmlnLmxsaW50Lm9wY29kZU1hcDsKKyAgICByZXR1cm4gZ19vcGNvZGVNYXA7CiB9CiAK
IGlubGluZSBPcGNvZGUqIG9wY29kZU1hcFdpZGUxNigpCiB7Ci0gICAgcmV0dXJuIGdfanNjQ29u
ZmlnLmxsaW50Lm9wY29kZU1hcFdpZGUxNjsKKyAgICByZXR1cm4gZ19vcGNvZGVNYXBXaWRlMTY7
CiB9CiAKIGlubGluZSBPcGNvZGUqIG9wY29kZU1hcFdpZGUzMigpCiB7Ci0gICAgcmV0dXJuIGdf
anNjQ29uZmlnLmxsaW50Lm9wY29kZU1hcFdpZGUzMjsKKyAgICByZXR1cm4gZ19vcGNvZGVNYXBX
aWRlMzI7CiB9CiAKLWlubGluZSBPcGNvZGUgZ2V0T3Bjb2RlKE9wY29kZUlEIGlkKQoraW5saW5l
IGNvbnN0IE9wY29kZSYgZ2V0T3Bjb2RlKE9wY29kZUlEIGlkKQogewogI2lmIEVOQUJMRShDT01Q
VVRFRF9HT1RPX09QQ09ERVMpCi0gICAgcmV0dXJuIGdfanNjQ29uZmlnLmxsaW50Lm9wY29kZU1h
cFtpZF07CisgICAgcmV0dXJuIGdfb3Bjb2RlTWFwW2lkXTsKICNlbHNlCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PE9wY29kZT4oaWQpOwogI2VuZGlmCiB9CiAKLWlubGluZSBPcGNvZGUgZ2V0T3Bj
b2RlV2lkZTE2KE9wY29kZUlEIGlkKQoraW5saW5lIGNvbnN0IE9wY29kZSYgZ2V0T3Bjb2RlV2lk
ZTE2KE9wY29kZUlEIGlkKQogewogI2lmIEVOQUJMRShDT01QVVRFRF9HT1RPX09QQ09ERVMpCi0g
ICAgcmV0dXJuIGdfanNjQ29uZmlnLmxsaW50Lm9wY29kZU1hcFdpZGUxNltpZF07CisgICAgcmV0
dXJuIGdfb3Bjb2RlTWFwV2lkZTE2W2lkXTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGlkKTsK
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiB9CiAKLWlubGluZSBP
cGNvZGUgZ2V0T3Bjb2RlV2lkZTMyKE9wY29kZUlEIGlkKQoraW5saW5lIGNvbnN0IE9wY29kZSYg
Z2V0T3Bjb2RlV2lkZTMyKE9wY29kZUlEIGlkKQogewogI2lmIEVOQUJMRShDT01QVVRFRF9HT1RP
X09QQ09ERVMpCi0gICAgcmV0dXJuIGdfanNjQ29uZmlnLmxsaW50Lm9wY29kZU1hcFdpZGUzMltp
ZF07CisgICAgcmV0dXJuIGdfb3Bjb2RlTWFwV2lkZTMyW2lkXTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKGlkKTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTIyLDM3
ICsxMjYsMzMgQEAgaW5saW5lIE9wY29kZSBnZXRPcGNvZGVXaWRlMzIoT3Bjb2RlSUQgaQogfQog
CiB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPiBnZXRDb2RlUHRyKE9wY29kZUlEIG9wY29kZUlEKQorQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBnZXRDb2RlUHRySW1wbChjb25zdCBPcGNvZGUgb3Bjb2Rl
LCBjb25zdCB2b2lkKiBvcGNvZGVBZGRyZXNzKQogewotICAgIHZvaWQqIGFkZHJlc3MgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihnZXRPcGNvZGUob3Bjb2RlSUQpKTsKLSAgICBhZGRyZXNzID0g
cmV0YWdDb2RlUHRyPEJ5dGVjb2RlUHRyVGFnLCB0YWc+KGFkZHJlc3MpOwotICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKGFk
ZHJlc3MpOworICAgIHZvaWQqIG9wY29kZVZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
b3Bjb2RlKTsKKyAgICB2b2lkKiB1bnRhZ2dlZE9wY29kZSA9IHVudGFnQWRkcmVzc0RpdmVyc2lm
aWVkQ29kZVB0cjxCeXRlY29kZVB0clRhZz4ob3Bjb2RlVmFsdWUsIG9wY29kZUFkZHJlc3MpOwor
ICAgIHZvaWQqIHJldGFnZ2VkT3Bjb2RlID0gdGFnQ29kZVB0cjx0YWc+KHVudGFnZ2VkT3Bjb2Rl
KTsKKyAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyhyZXRhZ2dlZE9wY29kZSk7CiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+
Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUxNkNvZGVQ
dHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCitBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjx0YWc+IGdldENvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7Ci0gICAgdm9pZCogYWRkcmVz
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldE9wY29kZVdpZGUxNihvcGNvZGVJRCkpOwot
ICAgIGFkZHJlc3MgPSByZXRhZ0NvZGVQdHI8Qnl0ZWNvZGVQdHJUYWcsIHRhZz4oYWRkcmVzcyk7
Ci0gICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MoYWRkcmVzcyk7CisgICAgY29uc3QgT3Bjb2RlJiBvcGNvZGUgPSBnZXRPcGNv
ZGUob3Bjb2RlSUQpOworICAgIHJldHVybiBnZXRDb2RlUHRySW1wbDx0YWc+KG9wY29kZSwgJm9w
Y29kZSk7CiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUzMkNvZGVQdHIoT3Bjb2RlSUQgb3Bjb2RlSUQpCitB
TFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUxNkNvZGVQdHIo
T3Bjb2RlSUQgb3Bjb2RlSUQpCiB7Ci0gICAgdm9pZCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGdldE9wY29kZVdpZGUzMihvcGNvZGVJRCkpOwotICAgIGFkZHJlc3MgPSByZXRh
Z0NvZGVQdHI8Qnl0ZWNvZGVQdHJUYWcsIHRhZz4oYWRkcmVzcyk7Ci0gICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoYWRkcmVz
cyk7CisgICAgY29uc3QgT3Bjb2RlJiBvcGNvZGUgPSBnZXRPcGNvZGVXaWRlMTYob3Bjb2RlSUQp
OworICAgIHJldHVybiBnZXRDb2RlUHRySW1wbDx0YWc+KG9wY29kZSwgJm9wY29kZSk7CiB9CiAK
IHRlbXBsYXRlPFB0clRhZyB0YWc+Ci1BTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjx0YWc+IGdldENvZGVQdHIoY29uc3QgSW5zdHJ1Y3Rpb24mIGluc3RydWN0aW9uKQorQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFnPiBnZXRXaWRlMzJDb2RlUHRyKE9wY29k
ZUlEIG9wY29kZUlEKQogewotICAgIGlmIChpbnN0cnVjdGlvbi5pc1dpZGUxNigpKQotICAgICAg
ICByZXR1cm4gZ2V0V2lkZTE2Q29kZVB0cjx0YWc+KGluc3RydWN0aW9uLm9wY29kZUlEKCkpOwot
ICAgIGlmIChpbnN0cnVjdGlvbi5pc1dpZGUzMigpKQotICAgICAgICByZXR1cm4gZ2V0V2lkZTMy
Q29kZVB0cjx0YWc+KGluc3RydWN0aW9uLm9wY29kZUlEKCkpOwotICAgIHJldHVybiBnZXRDb2Rl
UHRyPHRhZz4oaW5zdHJ1Y3Rpb24ub3Bjb2RlSUQoKSk7CisgICAgY29uc3QgT3Bjb2RlJiBvcGNv
ZGUgPSBnZXRPcGNvZGVXaWRlMzIob3Bjb2RlSUQpOworICAgIHJldHVybiBnZXRDb2RlUHRySW1w
bDx0YWc+KG9wY29kZSwgJm9wY29kZSk7CiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC0y
MDYsMjkgKzIwNiwyOSBAQCBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRXaWRlMzJDb2RlRnVu
CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLWlubGluZSBPcGNvZGUgZ2V0T3Bjb2RlKFdh
c21PcGNvZGVJRCBpZCkKK2lubGluZSBjb25zdCBPcGNvZGUmIGdldE9wY29kZShXYXNtT3Bjb2Rl
SUQgaWQpCiB7CiAjaWYgRU5BQkxFKENPTVBVVEVEX0dPVE9fT1BDT0RFUykKLSAgICByZXR1cm4g
Z19qc2NDb25maWcubGxpbnQub3Bjb2RlTWFwW251bU9wY29kZUlEcyArIGlkXTsKKyAgICByZXR1
cm4gZ19vcGNvZGVNYXBbbnVtT3Bjb2RlSURzICsgaWRdOwogI2Vsc2UKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8T3Bjb2RlPihpZCk7CiAjZW5kaWYKIH0KIAotaW5saW5lIE9wY29kZSBnZXRPcGNv
ZGVXaWRlMTYoV2FzbU9wY29kZUlEIGlkKQoraW5saW5lIGNvbnN0IE9wY29kZSYgZ2V0T3Bjb2Rl
V2lkZTE2KFdhc21PcGNvZGVJRCBpZCkKIHsKICNpZiBFTkFCTEUoQ09NUFVURURfR09UT19PUENP
REVTKQotICAgIHJldHVybiBnX2pzY0NvbmZpZy5sbGludC5vcGNvZGVNYXBXaWRlMTZbbnVtT3Bj
b2RlSURzICsgaWRdOworICAgIHJldHVybiBnX29wY29kZU1hcFdpZGUxNltudW1PcGNvZGVJRHMg
KyBpZF07CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpZCk7CiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICNlbmRpZgogfQogCi1pbmxpbmUgT3Bjb2RlIGdldE9wY29kZVdpZGUz
MihXYXNtT3Bjb2RlSUQgaWQpCitpbmxpbmUgY29uc3QgT3Bjb2RlJiBnZXRPcGNvZGVXaWRlMzIo
V2FzbU9wY29kZUlEIGlkKQogewogI2lmIEVOQUJMRShDT01QVVRFRF9HT1RPX09QQ09ERVMpCi0g
ICAgcmV0dXJuIGdfanNjQ29uZmlnLmxsaW50Lm9wY29kZU1hcFdpZGUzMltudW1PcGNvZGVJRHMg
KyBpZF07CisgICAgcmV0dXJuIGdfb3Bjb2RlTWFwV2lkZTMyW251bU9wY29kZUlEcyArIGlkXTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGlkKTsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjM4LDI1ICsyMzgsMjIgQEAgaW5saW5lIE9wY29kZSBnZXRPcGNvZGVXaWRl
MzIoV2FzbU9wY29kZQogdGVtcGxhdGU8UHRyVGFnIHRhZz4KIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPHRhZz4gZ2V0Q29kZVB0cihXYXNtT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7
Ci0gICAgdm9pZCogYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldE9wY29kZShv
cGNvZGVJRCkpOwotICAgIGFkZHJlc3MgPSByZXRhZ0NvZGVQdHI8Qnl0ZWNvZGVQdHJUYWcsIHRh
Zz4oYWRkcmVzcyk7Ci0gICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVh
dGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoYWRkcmVzcyk7CisgICAgY29uc3QgT3Bjb2RlJiBvcGNv
ZGUgPSBnZXRPcGNvZGUob3Bjb2RlSUQpOworICAgIHJldHVybiBnZXRDb2RlUHRySW1wbDx0YWc+
KG9wY29kZSwgJm9wY29kZSk7CiB9CiAKIHRlbXBsYXRlPFB0clRhZyB0YWc+CiBBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IGdldFdpZGUxNkNvZGVQdHIoV2FzbU9wY29k
ZUlEIG9wY29kZUlEKQogewotICAgIHZvaWQqIGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihnZXRPcGNvZGVXaWRlMTYob3Bjb2RlSUQpKTsKLSAgICBhZGRyZXNzID0gcmV0YWdDb2Rl
UHRyPEJ5dGVjb2RlUHRyVGFnLCB0YWc+KGFkZHJlc3MpOwotICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKGFkZHJlc3MpOwor
ICAgIGNvbnN0IE9wY29kZSYgb3Bjb2RlID0gZ2V0T3Bjb2RlV2lkZTE2KG9wY29kZUlEKTsKKyAg
ICByZXR1cm4gZ2V0Q29kZVB0ckltcGw8dGFnPihvcGNvZGUsICZvcGNvZGUpOwogfQogCiB0ZW1w
bGF0ZTxQdHJUYWcgdGFnPgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
PiBnZXRXaWRlMzJDb2RlUHRyKFdhc21PcGNvZGVJRCBvcGNvZGVJRCkKIHsKLSAgICB2b2lkKiBh
ZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0T3Bjb2RlV2lkZTMyKG9wY29kZUlE
KSk7Ci0gICAgYWRkcmVzcyA9IHJldGFnQ29kZVB0cjxCeXRlY29kZVB0clRhZywgdGFnPihhZGRy
ZXNzKTsKLSAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21F
eGVjdXRhYmxlQWRkcmVzcyhhZGRyZXNzKTsKKyAgICBjb25zdCBPcGNvZGUmIG9wY29kZSA9IGdl
dE9wY29kZVdpZGUzMihvcGNvZGVJRCk7CisgICAgcmV0dXJuIGdldENvZGVQdHJJbXBsPHRhZz4o
b3Bjb2RlLCAmb3Bjb2RlKTsKIH0KIAogdGVtcGxhdGU8UHRyVGFnIHRhZz4KQEAgLTI4OSw5ICsy
ODYsOSBAQCBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRXaWRlMzJDb2RlRnVuCiAjZW5kaWYK
IH0KIAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jZWxzZQorI2Vs
c2UgLy8gbm90IEVOQUJMRShKSVQpCiBBTFdBWVNfSU5MSU5FIHZvaWQqIGdldENvZGVQdHIoT3Bj
b2RlSUQgaWQpCiB7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldE9wY29k
ZShpZCkpOwpAQCAtMzA2LDEyICszMDMsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQqIGdldFdpZGUz
MkNvZGVQdHIoT3BjCiB7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdldE9w
Y29kZVdpZGUzMihpZCkpOwogfQotI2VuZGlmCi0KLUFMV0FZU19JTkxJTkUgdm9pZCogZ2V0Q29k
ZVB0cihKU0M6OkVuY29kZWRKU1ZhbHVlIGdsdWVIZWxwZXIoKSkKLXsKLSAgICByZXR1cm4gYml0
d2lzZV9jYXN0PHZvaWQqPihnbHVlSGVscGVyKTsKLX0KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQog
CiAjaWYgRU5BQkxFKEpJVCkKIHN0cnVjdCBSZWdpc3RlcnMgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNp
b24gMjY5NDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcgQEAgY29uc3QgQXJpdGhQ
cm9maWxlSW50TnVtYmVyID0gY29uc3RleHByIAogY29uc3QgQXJpdGhQcm9maWxlTnVtYmVyTnVt
YmVyID0gY29uc3RleHByIChCaW5hcnlBcml0aFByb2ZpbGU6Om9ic2VydmVkTnVtYmVyTnVtYmVy
Qml0cygpKQogCiAjIFBvaW50ZXIgVGFncworY29uc3QgQWRkcmVzc0RpdmVyc2lmaWVkID0gMQog
Y29uc3QgQnl0ZWNvZGVQdHJUYWcgPSBjb25zdGV4cHIgQnl0ZWNvZGVQdHJUYWcKIGNvbnN0IEpT
RW50cnlQdHJUYWcgPSBjb25zdGV4cHIgSlNFbnRyeVB0clRhZwogY29uc3QgSG9zdEZ1bmN0aW9u
UHRyVGFnID0gY29uc3RleHByIEhvc3RGdW5jdGlvblB0clRhZwpAQCAtMzI5LDIwICszMzAsMjAg
QEAgZW5kCiAKIG1hY3JvIG5leHRJbnN0cnVjdGlvbigpCiAgICAgbG9hZGIgW1BCLCBQQywgMV0s
IHQwCi0gICAgbGVhcCBKU0NDb25maWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZp
Z09wY29kZU1hcCwgdDEKLSAgICBqbXAgW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFn
CisgICAgbGVhcCBfZ19vcGNvZGVNYXAsIHQxCisgICAgam1wIFt0MSwgdDAsIFB0clNpemVdLCBC
eXRlY29kZVB0clRhZywgQWRkcmVzc0RpdmVyc2lmaWVkCiBlbmQKIAogbWFjcm8gbmV4dEluc3Ry
dWN0aW9uV2lkZTE2KCkKICAgICBsb2FkYiBPcGNvZGVJRE5hcnJvd1NpemVbUEIsIFBDLCAxXSwg
dDAKLSAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBKU0M6Om9mZnNldE9mSlNDQ29uZmln
T3Bjb2RlTWFwV2lkZTE2LCB0MQotICAgIGptcCBbdDEsIHQwLCBQdHJTaXplXSwgQnl0ZWNvZGVQ
dHJUYWcKKyAgICBsZWFwIF9nX29wY29kZU1hcFdpZGUxNiwgdDEKKyAgICBqbXAgW3QxLCB0MCwg
UHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFnLCBBZGRyZXNzRGl2ZXJzaWZpZWQKIGVuZAogCiBtYWNy
byBuZXh0SW5zdHJ1Y3Rpb25XaWRlMzIoKQogICAgIGxvYWRiIE9wY29kZUlETmFycm93U2l6ZVtQ
QiwgUEMsIDFdLCB0MAotICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0
T2ZKU0NDb25maWdPcGNvZGVNYXBXaWRlMzIsIHQxCi0gICAgam1wIFt0MSwgdDAsIFB0clNpemVd
LCBCeXRlY29kZVB0clRhZworICAgIGxlYXAgX2dfb3Bjb2RlTWFwV2lkZTMyLCB0MQorICAgIGpt
cCBbdDEsIHQwLCBQdHJTaXplXSwgQnl0ZWNvZGVQdHJUYWcsIEFkZHJlc3NEaXZlcnNpZmllZAog
ZW5kCiAKIG1hY3JvIGRpc3BhdGNoKGFkdmFuY2VSZWcpCkBAIC0xNzU3LDEwICsxNzU4LDE2IEBA
IGVsc2UKICAgICAgICAgICAgIGxlYXAgKGxhYmVsIC0gXyVraW5kJV9yZWxhdGl2ZVBDQmFzZSlb
dDNdLCB0NAogICAgICAgICAgICAgbW92ZSBpbmRleCwgdDUKICAgICAgICAgICAgIHN0b3JlcCB0
NCwgW21hcCwgdDUsIDRdCi0gICAgICAgIGVsc2lmIEFSTTY0IG9yIEFSTTY0RQorICAgICAgICBl
bHNpZiBBUk02NAogICAgICAgICAgICAgcGNydG9hZGRyIGxhYmVsLCB0MwogICAgICAgICAgICAg
bW92ZSBpbmRleCwgdDQKICAgICAgICAgICAgIHN0b3JlcCB0MywgW21hcCwgdDQsIFB0clNpemVd
CisgICAgICAgIGVsc2lmIEFSTTY0RQorICAgICAgICAgICAgcGNydG9hZGRyIGxhYmVsLCB0Mwor
ICAgICAgICAgICAgbW92ZSBpbmRleCwgdDQKKyAgICAgICAgICAgIGxlYXAgW21hcCwgdDQsIFB0
clNpemVdLCB0NAorICAgICAgICAgICAgdGFnQ29kZVB0ciB0MywgQnl0ZWNvZGVQdHJUYWcsIEFk
ZHJlc3NEaXZlcnNpZmllZCwgdDQKKyAgICAgICAgICAgIHN0b3JlcCB0MywgW3Q0XQogICAgICAg
ICBlbHNpZiBBUk12NwogICAgICAgICAgICAgbXZsYmwgKGxhYmVsIC0gXyVraW5kJV9yZWxhdGl2
ZVBDQmFzZSksIHQ0CiAgICAgICAgICAgICBhZGRwIHQ0LCB0MywgdDQKQEAgLTE4MTAsNiArMTgx
NywxMiBAQCBtYWNybyBlbnRyeShraW5kLCBpbml0aWFsaXplKQogCiAgICAgICAgICMgSW5jbHVk
ZSBnZW5lcmF0ZWQgYnl0ZWNvZGUgaW5pdGlhbGl6YXRpb24gZmlsZS4KICAgICAgICAgaW5jbHVk
ZUVudHJpZXNBdE9mZnNldChraW5kLCBpbml0aWFsaXplKQorCisgICAgICAgIGxlYXAgSlNDQ29u
ZmlnICsgY29uc3RleHByIEpTQzo6b2Zmc2V0T2ZKU0NDb25maWdJbml0aWFsaXplSGFzQmVlbkNh
bGxlZCwgdDMKKyAgICAgICAgYmJlcSBbdDNdLCAwLCAubm90RnJvemVuCisgICAgICAgIGNyYXNo
KCkKKyAgICAubm90RnJvemVuOgorCiAgICAgICAgIHBvcENhbGxlZVNhdmVzKCkKICAgICAgICAg
ZnVuY3Rpb25FcGlsb2d1ZSgpCiAgICAgICAgIHJldApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCShyZXZpc2lvbiAyNjk0MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC05
NSwyMCArOTUsMjAgQEAgZW5kCiAKIG1hY3JvIHdhc21OZXh0SW5zdHJ1Y3Rpb24oKQogICAgIGxv
YWRiIFtQQiwgUEMsIDFdLCB0MAotICAgIGxlYXAgSlNDQ29uZmlnICsgY29uc3RleHByIEpTQzo6
b2Zmc2V0T2ZKU0NDb25maWdPcGNvZGVNYXAsIHQxCi0gICAgam1wIE51bWJlck9mSlNPcGNvZGVJ
RHMgKiBQdHJTaXplW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFnCisgICAgbGVhcCBf
Z19vcGNvZGVNYXAsIHQxCisgICAgam1wIE51bWJlck9mSlNPcGNvZGVJRHMgKiBQdHJTaXplW3Qx
LCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFnLCBBZGRyZXNzRGl2ZXJzaWZpZWQKIGVuZAog
CiBtYWNybyB3YXNtTmV4dEluc3RydWN0aW9uV2lkZTE2KCkKICAgICBsb2FkYiBPcGNvZGVJRE5h
cnJvd1NpemVbUEIsIFBDLCAxXSwgdDAKLSAgICBsZWFwIEpTQ0NvbmZpZyArIGNvbnN0ZXhwciBK
U0M6Om9mZnNldE9mSlNDQ29uZmlnT3Bjb2RlTWFwV2lkZTE2LCB0MQotICAgIGptcCBOdW1iZXJP
ZkpTT3Bjb2RlSURzICogUHRyU2l6ZVt0MSwgdDAsIFB0clNpemVdLCBCeXRlY29kZVB0clRhZwor
ICAgIGxlYXAgX2dfb3Bjb2RlTWFwV2lkZTE2LCB0MQorICAgIGptcCBOdW1iZXJPZkpTT3Bjb2Rl
SURzICogUHRyU2l6ZVt0MSwgdDAsIFB0clNpemVdLCBCeXRlY29kZVB0clRhZywgQWRkcmVzc0Rp
dmVyc2lmaWVkCiBlbmQKIAogbWFjcm8gd2FzbU5leHRJbnN0cnVjdGlvbldpZGUzMigpCiAgICAg
bG9hZGIgT3Bjb2RlSUROYXJyb3dTaXplW1BCLCBQQywgMV0sIHQwCi0gICAgbGVhcCBKU0NDb25m
aWcgKyBjb25zdGV4cHIgSlNDOjpvZmZzZXRPZkpTQ0NvbmZpZ09wY29kZU1hcFdpZGUzMiwgdDEK
LSAgICBqbXAgTnVtYmVyT2ZKU09wY29kZUlEcyAqIFB0clNpemVbdDEsIHQwLCBQdHJTaXplXSwg
Qnl0ZWNvZGVQdHJUYWcKKyAgICBsZWFwIF9nX29wY29kZU1hcFdpZGUzMiwgdDEKKyAgICBqbXAg
TnVtYmVyT2ZKU09wY29kZUlEcyAqIFB0clNpemVbdDEsIHQwLCBQdHJTaXplXSwgQnl0ZWNvZGVQ
dHJUYWcsIEFkZHJlc3NEaXZlcnNpZmllZAogZW5kCiAKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQo
aW5jcmVtZW50LCBhY3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS9hcm02NC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS9hcm02NC5yYgkocmV2aXNpb24gMjY5NDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29m
ZmxpbmVhc20vYXJtNjQucmIJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHly
aWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29w
eXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzA1LDkgKzMwNSwxMSBAQCBkZWYgYXJtNjRMb3dlckxh
YmVsUmVmZXJlbmNlcyhsaXN0KQogICAgICAgICAgICAgd2hlbiAibG9hZGkiLCAibG9hZGlzIiwg
ImxvYWRwIiwgImxvYWRxIiwgImxvYWRiIiwgImxvYWRic2kiLCAibG9hZGJzcSIsICJsb2FkaCIs
ICJsb2FkaHNpIiwgImxvYWRoc3EiLCAibGVhcCIKICAgICAgICAgICAgICAgICBsYWJlbFJlZiA9
IG5vZGUub3BlcmFuZHNbMF0KICAgICAgICAgICAgICAgICBpZiBsYWJlbFJlZi5pc19hPyBMYWJl
bFJlZmVyZW5jZQotICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAubmV3KG5vZGUuY29kZU9y
aWdpbiwgOmdwcikKLSAgICAgICAgICAgICAgICAgICAgbmV3TGlzdCA8PCBJbnN0cnVjdGlvbi5u
ZXcoY29kZU9yaWdpbiwgImdsb2JhbGFkZHIiLCBbTGFiZWxSZWZlcmVuY2UubmV3KG5vZGUuY29k
ZU9yaWdpbiwgbGFiZWxSZWYubGFiZWwpLCB0bXBdKQotICAgICAgICAgICAgICAgICAgICBuZXdM
aXN0IDw8IEluc3RydWN0aW9uLm5ldyhjb2RlT3JpZ2luLCBub2RlLm9wY29kZSwgW0FkZHJlc3Mu
bmV3KG5vZGUuY29kZU9yaWdpbiwgdG1wLCBJbW1lZGlhdGUubmV3KG5vZGUuY29kZU9yaWdpbiwg
bGFiZWxSZWYub2Zmc2V0KSksIG5vZGUub3BlcmFuZHNbMV1dKQorICAgICAgICAgICAgICAgICAg
ICBkZXN0ID0gbm9kZS5vcGVyYW5kc1sxXQorICAgICAgICAgICAgICAgICAgICBuZXdMaXN0IDw8
IEluc3RydWN0aW9uLm5ldyhjb2RlT3JpZ2luLCAiZ2xvYmFsYWRkciIsIFtMYWJlbFJlZmVyZW5j
ZS5uZXcobm9kZS5jb2RlT3JpZ2luLCBsYWJlbFJlZi5sYWJlbCksIGRlc3RdKQorICAgICAgICAg
ICAgICAgICAgICBpZiBub2RlLm9wY29kZSAhPSAibGVhcCIgb3IgbGFiZWxSZWYub2Zmc2V0ICE9
IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xpc3QgPDwgSW5zdHJ1Y3Rpb24ubmV3KGNv
ZGVPcmlnaW4sIG5vZGUub3Bjb2RlLCBbQWRkcmVzcy5uZXcobm9kZS5jb2RlT3JpZ2luLCBkZXN0
LCBJbW1lZGlhdGUubmV3KG5vZGUuY29kZU9yaWdpbiwgbGFiZWxSZWYub2Zmc2V0KSksIGRlc3Rd
KQorICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIG5ld0xpc3QgPDwgbm9kZQogICAgICAgICAgICAgICAgIGVuZApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXJtNjRlLnJiCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FybTY0ZS5yYgkocmV2aXNpb24gMjY5
NDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXJtNjRlLnJiCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxOC0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDIsOCArNDIsMjEgQEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgICAgIGNvZGVP
cmlnaW4gPSBub2RlLmNvZGVPcmlnaW4KICAgICAgICAgICAgIGNhc2Ugbm9kZS5vcGNvZGUKICAg
ICAgICAgICAgIHdoZW4gImptcCIsICJjYWxsIgotICAgICAgICAgICAgICAgIGlmIG5vZGUub3Bl
cmFuZHMuc2l6ZSA+IDEKLSAgICAgICAgICAgICAgICAgICAgaWYgbm9kZS5vcGVyYW5kc1sxXS5p
c19hPyBSZWdpc3RlcklECisgICAgICAgICAgICAgICAgaWYgbm9kZS5vcGVyYW5kcy5zaXplID09
IDMKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNzIG5vZGUub3BlcmFuZHNbMl0udmFs
dWUgPT0gMQorICAgICAgICAgICAgICAgICAgICByYWlzZSB1bmxlc3Mgbm9kZS5vcGVyYW5kc1sx
XS5pbW1lZGlhdGU/IGFuZCBub2RlLm9wZXJhbmRzWzFdLnZhbHVlIDw9IDB4ZmZmZgorICAgICAg
ICAgICAgICAgICAgICByYWlzZSB1bmxlc3Mgbm9kZS5vcGVyYW5kc1swXS5hZGRyZXNzPworICAg
ICAgICAgICAgICAgICAgICBhZGRyZXNzID0gVG1wLm5ldyhjb2RlT3JpZ2luLCA6Z3ByKQorICAg
ICAgICAgICAgICAgICAgICB0YXJnZXQgPSBUbXAubmV3KGNvZGVPcmlnaW4sIDpncHIpCisgICAg
ICAgICAgICAgICAgICAgIG5ld0xpc3QgPDwgSW5zdHJ1Y3Rpb24ubmV3KGNvZGVPcmlnaW4sICJs
ZWFwIiwgW25vZGUub3BlcmFuZHNbMF0sIGFkZHJlc3NdLCBhbm5vdGF0aW9uKQorICAgICAgICAg
ICAgICAgICAgICBuZXdMaXN0IDw8IEluc3RydWN0aW9uLm5ldyhjb2RlT3JpZ2luLCAibG9hZHAi
LCBbQWRkcmVzcy5uZXcoY29kZU9yaWdpbiwgYWRkcmVzcywgSW1tZWRpYXRlLm5ldyhjb2RlT3Jp
Z2luLCAwKSksIHRhcmdldF0sIGFubm90YXRpb24pCisgICAgICAgICAgICAgICAgICAgIHRhZyA9
IFRtcC5uZXcoY29kZU9yaWdpbiwgOmdwcikKKyAgICAgICAgICAgICAgICAgICAgbmV3TGlzdCA8
PCBJbnN0cnVjdGlvbi5uZXcoY29kZU9yaWdpbiwgIm1vdmUiLCBbSW1tZWRpYXRlLm5ldyhjb2Rl
T3JpZ2luLCBub2RlLm9wZXJhbmRzWzFdLnZhbHVlIDw8IDQ4KSwgdGFnXSwgYW5ub3RhdGlvbikK
KyAgICAgICAgICAgICAgICAgICAgbmV3TGlzdCA8PCBJbnN0cnVjdGlvbi5uZXcoY29kZU9yaWdp
biwgInhvcnAiLCBbYWRkcmVzcywgdGFnXSwgYW5ub3RhdGlvbikKKyAgICAgICAgICAgICAgICAg
ICAgbmV3TGlzdCA8PCBub2RlLmNsb25lV2l0aE5ld09wZXJhbmRzKFt0YXJnZXQsIHRhZ10pCisg
ICAgICAgICAgICAgICAgICAgIHdhc0hhbmRsZWQgPSB0cnVlCisgICAgICAgICAgICAgICAgZWxz
aWYgbm9kZS5vcGVyYW5kcy5zaXplID4gMQorICAgICAgICAgICAgICAgICAgICBpZiBub2RlLm9w
ZXJhbmRzWzFdLmlzX2E/IFJlZ2lzdGVySUQgb3Igbm9kZS5vcGVyYW5kc1sxXS5pc19hPyBUbXAK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IHJpc2NMb3dlck9wZXJhbmRUb1JlZ2lzdGVy
KG5vZGUsIG5ld0xpc3QsIHBvc3RJbnN0cnVjdGlvbnMsIDEsICJwIiwgZmFsc2UpCiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IFRtcC5uZXco
Y29kZU9yaWdpbiwgOmdwcikKQEAgLTU2LDYgKzY5LDIzIEBAIGNsYXNzIEluc3RydWN0aW9uCiAg
ICAgICAgICAgICAgICAgICAgIG5ld0xpc3QgPDwgbm9kZS5jbG9uZVdpdGhOZXdPcGVyYW5kcyhv
cGVyYW5kcykKICAgICAgICAgICAgICAgICAgICAgd2FzSGFuZGxlZCA9IHRydWUKICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIHdoZW4gInRhZ0NvZGVQdHIiCisgICAgICAgICAgICAg
ICAgcmFpc2UgaWYgbm9kZS5vcGVyYW5kcy5zaXplIDwgMSBvciBub3Qgbm9kZS5vcGVyYW5kc1sw
XS5pc19hPyBSZWdpc3RlcklECisgICAgICAgICAgICAgICAgaWYgbm9kZS5vcGVyYW5kcy5zaXpl
ID09IDQKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNzIG5vZGUub3BlcmFuZHNbM10u
cmVnaXN0ZXI/CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVubGVzcyBub2RlLm9wZXJhbmRz
WzJdLmltbWVkaWF0ZT8gYW5kIG5vZGUub3BlcmFuZHNbMl0udmFsdWUgPT0gMQorICAgICAgICAg
ICAgICAgICAgICByYWlzZSB1bmxlc3Mgbm9kZS5vcGVyYW5kc1sxXS5pbW1lZGlhdGU/IGFuZCBu
b2RlLm9wZXJhbmRzWzFdLnZhbHVlIDw9IDB4ZmZmZgorICAgICAgICAgICAgICAgICAgICBhZGRy
ZXNzID0gbm9kZS5vcGVyYW5kc1szXQorICAgICAgICAgICAgICAgICAgICBpZiBub2RlLm9wZXJh
bmRzWzFdLmltbWVkaWF0ZT8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IFRtcC5uZXco
Y29kZU9yaWdpbiwgOmdwcikKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xpc3QgPDwgSW5z
dHJ1Y3Rpb24ubmV3KGNvZGVPcmlnaW4sICJtb3ZlIiwgW0ltbWVkaWF0ZS5uZXcoY29kZU9yaWdp
biwgbm9kZS5vcGVyYW5kc1sxXS52YWx1ZSA8PCA0OCksIHRhZ10sIGFubm90YXRpb24pCisgICAg
ICAgICAgICAgICAgICAgIGVsc2lmIG9wZXJhbmRzWzFdLnJlZ2lzdGVyPworICAgICAgICAgICAg
ICAgICAgICAgICAgdGFnID0gbm9kZS5vcGVyYW5kc1sxXQorICAgICAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICAgICAgbmV3TGlzdCA8PCBJbnN0cnVjdGlvbi5uZXcoY29kZU9y
aWdpbiwgInhvcnAiLCBbYWRkcmVzcywgdGFnXSwgYW5ub3RhdGlvbikKKyAgICAgICAgICAgICAg
ICAgICAgbmV3TGlzdCA8PCBub2RlLmNsb25lV2l0aE5ld09wZXJhbmRzKFtub2RlLm9wZXJhbmRz
WzBdLCB0YWddKQorICAgICAgICAgICAgICAgICAgICB3YXNIYW5kbGVkID0gdHJ1ZQorICAgICAg
ICAgICAgICAgIGVuZAogICAgICAgICAgICAgd2hlbiAidW50YWdBcnJheVB0ciIKICAgICAgICAg
ICAgICAgICBuZXdPcGVyYW5kcyA9IG5vZGUub3BlcmFuZHMubWFwIHsKICAgICAgICAgICAgICAg
ICAgICAgfCBvcGVyYW5kIHwKQEAgLTkxLDYgKzEyMSwxMSBAQCBjbGFzcyBJbnN0cnVjdGlvbgog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVtaXRBUk02NFVuZmxpcHBlZCgiYnJh
YiIsIG9wZXJhbmRzLCA6cHRyKQogICAgICAgICAgICAgZW5kCisgICAgICAgIHdoZW4gInRhZ0Nv
ZGVQdHIiCisgICAgICAgICAgICByYWlzZSBpZiBvcGVyYW5kcy5zaXplID4gMgorICAgICAgICAg
ICAgcmFpc2UgdW5sZXNzIG9wZXJhbmRzWzBdLnJlZ2lzdGVyPworICAgICAgICAgICAgcmFpc2Ug
dW5sZXNzIG9wZXJhbmRzWzFdLnJlZ2lzdGVyPworICAgICAgICAgICAgZW1pdEFSTTY0VW5mbGlw
cGVkKCJwYWNpYiIsIG9wZXJhbmRzLCA6cHRyKQogICAgICAgICB3aGVuICJ0YWdSZXR1cm5BZGRy
ZXNzIgogICAgICAgICAgICAgcmFpc2UgaWYgb3BlcmFuZHMuc2l6ZSA8IDEgb3Igbm90IG9wZXJh
bmRzWzBdLmlzX2E/IFJlZ2lzdGVySUQKICAgICAgICAgICAgIGlmIG9wZXJhbmRzWzBdLmlzX2E/
IFJlZ2lzdGVySUQgYW5kIG9wZXJhbmRzWzBdLm5hbWUgPT0gInNwIgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXN0LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9vZmZsaW5lYXNtL2FzdC5yYgkocmV2aXNpb24gMjY5NDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vYXN0LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQg
KzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjk5LDcgKzY5OSwx
MCBAQCBjbGFzcyBGUFJlZ2lzdGVySUQgPCBOb0NoaWxkcmVuCiBlbmQKIAogY2xhc3MgU3BlY2lh
bFJlZ2lzdGVyIDwgTm9DaGlsZHJlbgorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisKICAgICBkZWYg
aW5pdGlhbGl6ZShuYW1lKQorICAgICAgICBzdXBlcihjb2RlT3JpZ2luKQogICAgICAgICBAbmFt
ZSA9IG5hbWUKICAgICBlbmQKICAgICAKQEAgLTk0Miw3ICs5NDUsNyBAQCBjbGFzcyBJbnN0cnVj
dGlvbiA8IE5vZGUKICAgICAgICAgICAgICRhc20ucHV0R2xvYmFsQW5ub3RhdGlvbgogICAgICAg
ICB3aGVuICJlbWl0IgogICAgICAgICAgICAgJGFzbS5wdXRzICIje29wZXJhbmRzWzBdLmR1bXB9
IgotICAgICAgICB3aGVuICJ0YWdSZXR1cm5BZGRyZXNzIiwgInVudGFnUmV0dXJuQWRkcmVzcyIs
ICJyZW1vdmVDb2RlUHRyVGFnIiwgInVudGFnQXJyYXlQdHIiCisgICAgICAgIHdoZW4gInRhZ0Nv
ZGVQdHIiLCAidGFnUmV0dXJuQWRkcmVzcyIsICJ1bnRhZ1JldHVybkFkZHJlc3MiLCAicmVtb3Zl
Q29kZVB0clRhZyIsICJ1bnRhZ0FycmF5UHRyIgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBy
YWlzZSAiVW5oYW5kbGVkIG9wY29kZSAje29wY29kZX0gYXQgI3tjb2RlT3JpZ2luU3RyaW5nfSIK
ICAgICAgICAgZW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0
cnVjdGlvbnMucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVh
c20vaW5zdHJ1Y3Rpb25zLnJiCShyZXZpc2lvbiAyNjk0MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIJKHdvcmtpbmcgY29weSkKQEAgLTEsNCAr
MSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOTksNiArMjk5LDcg
QEAgTUFDUk9fSU5TVFJVQ1RJT05TID0KICAgICAgImxlYWkiLAogICAgICAibGVhcCIsCiAgICAg
ICJtZW1mZW5jZSIsCisgICAgICJ0YWdDb2RlUHRyIiwKICAgICAgInRhZ1JldHVybkFkZHJlc3Mi
LAogICAgICAidW50YWdSZXR1cm5BZGRyZXNzIiwKICAgICAgInJlbW92ZUNvZGVQdHJUYWciLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDQ29uZmlnLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDQ29uZmlnLmgJKHJldmlzaW9u
IDI2OTQxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MCw5ICs5MCw2IEBAIHN0cnVjdCBDb25maWcgewogICAgIHN0cnVj
dCB7CiAgICAgICAgIHVpbnQ4X3QgZXhjZXB0aW9uSW5zdHJ1Y3Rpb25zW21heE9wY29kZUxlbmd0
aCArIDFdOwogICAgICAgICB1aW50OF90IHdhc21FeGNlcHRpb25JbnN0cnVjdGlvbnNbbWF4T3Bj
b2RlTGVuZ3RoICsgMV07Ci0gICAgICAgIE9wY29kZSBvcGNvZGVNYXBbbnVtT3Bjb2RlSURzICsg
bnVtV2FzbU9wY29kZUlEc107Ci0gICAgICAgIE9wY29kZSBvcGNvZGVNYXBXaWRlMTZbbnVtT3Bj
b2RlSURzICsgbnVtV2FzbU9wY29kZUlEc107Ci0gICAgICAgIE9wY29kZSBvcGNvZGVNYXBXaWRl
MzJbbnVtT3Bjb2RlSURzICsgbnVtV2FzbU9wY29kZUlEc107CiAgICAgICAgIGNvbnN0IHZvaWQq
IGdhdGVNYXBbbnVtYmVyT2ZHYXRlc107CiAgICAgfSBsbGludDsKIApAQCAtMTE2LDkgKzExMyw3
IEBAIGV4dGVybiAiQyIgSlNfRVhQT1JUX1BSSVZBVEUgQ29uZmlnIGdfanMKIAogI2VuZGlmIC8v
IEVOQUJMRShVTklGSUVEX0FORF9GUkVFWkFCTEVfQ09ORklHX1JFQ09SRCkKIAotY29uc3RleHBy
IHNpemVfdCBvZmZzZXRPZkpTQ0NvbmZpZ09wY29kZU1hcCA9IG9mZnNldG9mKEpTQzo6Q29uZmln
LCBsbGludC5vcGNvZGVNYXApOwotY29uc3RleHByIHNpemVfdCBvZmZzZXRPZkpTQ0NvbmZpZ09w
Y29kZU1hcFdpZGUxNiA9IG9mZnNldG9mKEpTQzo6Q29uZmlnLCBsbGludC5vcGNvZGVNYXBXaWRl
MTYpOwotY29uc3RleHByIHNpemVfdCBvZmZzZXRPZkpTQ0NvbmZpZ09wY29kZU1hcFdpZGUzMiA9
IG9mZnNldG9mKEpTQzo6Q29uZmlnLCBsbGludC5vcGNvZGVNYXBXaWRlMzIpOworY29uc3RleHBy
IHNpemVfdCBvZmZzZXRPZkpTQ0NvbmZpZ0luaXRpYWxpemVIYXNCZWVuQ2FsbGVkID0gb2Zmc2V0
b2YoSlNDOjpDb25maWcsIGluaXRpYWxpemVIYXNCZWVuQ2FsbGVkKTsKIGNvbnN0ZXhwciBzaXpl
X3Qgb2Zmc2V0T2ZKU0NDb25maWdHYXRlTWFwID0gb2Zmc2V0b2YoSlNDOjpDb25maWcsIGxsaW50
LmdhdGVNYXApOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ1B0clRhZy5oCShyZXZpc2lvbiAyNjk0MTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NQdHJUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDYg
KzIwMCwyMCBAQCBpbmxpbmUgUHRyVHlwZSB1bnRhZ0NvZGVQdHJXaXRoU3RhY2tQb2luCiAjZW5k
aWYKIH0KIAordGVtcGxhdGU8UHRyVGFnIHRhZywgdHlwZW5hbWUgUHRyVHlwZT4KK2lubGluZSBQ
dHJUeXBlIHVudGFnQWRkcmVzc0RpdmVyc2lmaWVkQ29kZVB0cihQdHJUeXBlIHB0ciwgY29uc3Qg
dm9pZCogcHRyQWRkcmVzcykKK3sKKyAgICBVTlVTRURfUEFSQU0ocHRyQWRkcmVzcyk7CisjaWYg
Q1BVKEFSTTY0RSkKKyAgICB1aW50NjRfdCBhZGRyZXNzID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90
PihwdHJBZGRyZXNzKTsKKyAgICB1aW50NjRfdCB0YWdCaXRzID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHRhZykgPDwgNDg7CisgICAgdWludDY0X3QgYWRkcmVzc0RpdmVyc2lmaWVkVGFnID0gdGFn
Qml0cyBeIGFkZHJlc3M7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9wdHJhdXRoX2F1dGgocHRyLCBw
dHJhdXRoX2tleV9wcm9jZXNzX2RlcGVuZGVudF9jb2RlLCBhZGRyZXNzRGl2ZXJzaWZpZWRUYWcp
OworI2Vsc2UKKyAgICByZXR1cm4gcHRyOworI2VuZGlmCit9CisKICNpZiBDUFUoQVJNNjRFKSAm
JiBFTkFCTEUoUFRSVEFHX0RFQlVHR0lORykKIHZvaWQgaW5pdGlhbGl6ZVB0clRhZ0xvb2t1cCgp
OwogI2Vsc2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>