<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>615</bug_id>
          
          <creation_ts>2012-09-12 15:58:33 +0200</creation_ts>
          <short_desc>PBuffer On Second X Screen Fails</short_desc>
          <delta_ts>2012-09-19 20:04:38 +0200</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>x11</component>
          <version>2</version>
          <rep_platform>pc_x86_32</rep_platform>
          <op_sys>linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>---</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Rob Hatcherson">rob.hatcherson</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          
          
          <cf_type>---</cf_type>
          <cf_scm_refs>jogl c0cc74a7d525aaa7eb89f60c836589678053d5fb</cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1782</commentid>
    <comment_count>0</comment_count>
      <attachid>367</attachid>
    <who name="Rob Hatcherson">rob.hatcherson</who>
    <bug_when>2012-09-12 15:58:33 +0200</bug_when>
    <thetext>Created attachment 367
X11GLXDrawableFactory version with patch for pbuffers on a second X screen.

JOGAMP/JOGL version RC10
Fedora 12
Sun/Oracle JDK 7u7
Intel/32-bit
NVIDIA driver version 304.37

We have some PBuffer code that was working until we tried to move it to a second X screen (not TwinView, but a second screen as in DISPLAY=&quot;:0.1&quot;).  After we did that an attempt to make the PBuffer&apos;s context current threw a GLException.

We investigated and found that during the createGLPbuffer call we ended up at a spot in X11GLXDrawableFactory that assumed screen 0.  In RC10 there are two such places in X11GLXDrawableFactory, on lines 240 and 517 in the original RC10 file.  They look like this respectively:

240: final X11GraphicsScreen sharedScreen = new X11GraphicsScreen(sharedDevice, 0);

517: final X11GraphicsScreen screen = new X11GraphicsScreen(device, 0);


As an experiment we changed these two lines to get the screen number from some nearby connection.  After we made this change the problem disappeared and the PBuffer code started working again.  The modified lines look like this (line numbers changed due to the addition of a new method at the top of the class):

263: final X11GraphicsScreen sharedScreen = new X11GraphicsScreen(sharedDevice, X11GLXDrawableFactory.getScreenNumberFrom(connection) );

540: final X11GraphicsScreen screen = new X11GraphicsScreen(device, getScreenNumberFrom( device.getConnection() ) );

...where getScreenNumberFrom(String connection) is a new method we added to pull the screen number from a connection string.  Note that there probably is a simpler way to do this.


The attached file is our modified version of X11GLXDrawableFactory.java.  The changes are the two modified lines noted above, plus the new &quot;getScreenNumberFrom&quot; method which currently is located near the top of the class.  Keep in mind that we were making changes in areas where our expertise is limited, so I strongly recommend that smarter minds than ours further evaluate this &quot;fix&quot; for correctness.  It makes sense that an assumption of screen 0 all the time might eventually cause problems, but who knows.

Also, the &quot;getScreenNumberFrom&quot; method works well enough, but it seems like either a) the screen number should already be conveniently available from some other spot i.e. we shouldn&apos;t have to parse it out of a DISPLAY String, or b) a utility method such as this probably belongs in some other place, e.g. X11Utils, or some display/connection class, etc. assuming a better place already exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800</commentid>
    <comment_count>1</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2012-09-17 03:33:00 +0200</bug_when>
    <thetext>&lt;http://jogamp.org/git/?p=jogl.git;a=commit;h=c0cc74a7d525aaa7eb89f60c836589678053d5fb&gt;

    Fixes Bug 615 - X11: Use proper screen index/name for shared resources and device 
    denominated &apos;mutable&apos; surfaces (dummy, offscreen, ..)
    
    Fix follows findings of Rob Hatcherson, but instead of parsing the display connection ourself
    we use the X11 macro &apos;DefaultScreen(display)&apos;
    
    See &lt;http://tronche.com/gui/x/xlib/display/opening.html#Display&gt;
    
    &quot;The screen number specified in the display_name argument is returned by the DefaultScreen() macro
    (or the XDefaultScreen() function).&quot;
    
    Since I currently have no two-head X11 setup here, only xinerama via virtualbox,
    pls test / validate.
    
    Note: One Display connection may span multiple screens, i.e.:
      display &apos;lala:0.1&apos; may span from screen 1 - 3 (non xinerama mode)
    
    Discussion:
    
    [1] How to validate whether a screen number belongs to one display connection ?
    We can query ScreenCount(display), however it is not clear what the range would be.
    
    [2] With 1 display connection spanning multiple screens, what is/are the proper connection string[s] ?
    
    [3] After all, it seems this ancient configuration really cannot beat a modern setup w/ XRandR
        having Xinerama enabled. The latter is the default anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828</commentid>
    <comment_count>2</comment_count>
    <who name="Rob Hatcherson">rob.hatcherson</who>
    <bug_when>2012-09-19 20:04:38 +0200</bug_when>
    <thetext>The pbuffer problem no longer happens with a build from repos cloned on 09/17/2012.  However, we started getting the problem discussed here instead:

http://forum.jogamp.org/JVM-Crash-During-X11-Shutdown-tc4026218.html

My initial reaction is that this shutdown issue is not related to your improved fix for this pbuffer problem, as much has also changed in the X11 shutdown area.


I can&apos;t add any valuable response to discussion points 1) and 2) yet, but will think about them.

Regarding discussion point 3), we use the separate screen approach because the absolute coordinate system that&apos;s established on the second screen makes it easier to set up touchscreen drivers.  The fellow here that usually does that setup says it&apos;s a bigger pain with e.g. TwinView.  I&apos;d stop short of calling him an X super guru, but he does know a lot about it and I suspect if a better answer existed then he would already be using it.  We could be missing a nicer alternative though, and are always open to suggestions.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>367</attachid>
            <date>2012-09-12 15:58:33 +0200</date>
            <delta_ts>2012-09-12 15:58:33 +0200</delta_ts>
            <desc>X11GLXDrawableFactory version with patch for pbuffers on a second X screen.</desc>
            <filename>X11GLXDrawableFactory.java</filename>
            <type>text/x-java</type>
            <size>31726</size>
            <attacher name="Rob Hatcherson">rob.hatcherson</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChjKSAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KICogQ29weXJpZ2h0IChjKSAyMDEwIEpvZ0FtcCBDb21tdW5pdHkuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAqIG1ldDoK
ICoKICogLSBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgogKgogKiAtIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAq
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KICoKICogTmVpdGhlciB0aGUgbmFtZSBvZiBTdW4gTWljcm9zeXN0ZW1z
LCBJbmMuIG9yIHRoZSBuYW1lcyBvZgogKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBUaGlzIHNvZnR3
YXJlIGlzIHByb3ZpZGVkICJBUyBJUywiIHdpdGhvdXQgYSB3YXJyYW50eSBvZiBhbnkga2luZC4g
QUxMCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMgQU5E
IFdBUlJBTlRJRVMsCiAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFO
VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEKICogUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZS
SU5HRU1FTlQsIEFSRSBIRVJFQlkgRVhDTFVERUQuIFNVTgogKiBNSUNST1NZU1RFTVMsIElOQy4g
KCJTVU4iKSBBTkQgSVRTIExJQ0VOU09SUyBTSEFMTCBOT1QgQkUgTElBQkxFIEZPUgogKiBBTlkg
REFNQUdFUyBTVUZGRVJFRCBCWSBMSUNFTlNFRSBBUyBBIFJFU1VMVCBPRiBVU0lORywgTU9ESUZZ
SU5HIE9SCiAqIERJU1RSSUJVVElORyBUSElTIFNPRlRXQVJFIE9SIElUUyBERVJJVkFUSVZFUy4g
SU4gTk8gRVZFTlQgV0lMTCBTVU4gT1IKICogSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFO
WSBMT1NUIFJFVkVOVUUsIFBST0ZJVCBPUiBEQVRBLCBPUiBGT1IKICogRElSRUNULCBJTkRJUkVD
VCwgU1BFQ0lBTCwgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUiBQVU5JVElWRQogKiBEQU1B
R0VTLCBIT1dFVkVSIENBVVNFRCBBTkQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZIE9GIExJQUJJ
TElUWSwKICogQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYKICogU1VOIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KICoKICogWW91IGFja25vd2xlZGdlIHRoYXQgdGhpcyBz
b2Z0d2FyZSBpcyBub3QgZGVzaWduZWQgb3IgaW50ZW5kZWQgZm9yIHVzZQogKiBpbiB0aGUgZGVz
aWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkgbnVjbGVh
cgogKiBmYWNpbGl0eS4KICovCgpwYWNrYWdlIGpvZ2FtcC5vcGVuZ2wueDExLmdseDsKCmltcG9y
dCBqYXZhLm5pby5CdWZmZXI7CmltcG9ydCBqYXZhLm5pby5TaG9ydEJ1ZmZlcjsKaW1wb3J0IGph
dmEudXRpbC5Db2xsZWN0aW9uOwppbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CmltcG9ydCBqYXZh
LnV0aWwuTGlzdDsKCmltcG9ydCBqYXZheC5tZWRpYS5uYXRpdmV3aW5kb3cuQWJzdHJhY3RHcmFw
aGljc0NvbmZpZ3VyYXRpb247CmltcG9ydCBqYXZheC5tZWRpYS5uYXRpdmV3aW5kb3cuQWJzdHJh
Y3RHcmFwaGljc0RldmljZTsKaW1wb3J0IGphdmF4Lm1lZGlhLm5hdGl2ZXdpbmRvdy5BYnN0cmFj
dEdyYXBoaWNzU2NyZWVuOwppbXBvcnQgamF2YXgubWVkaWEubmF0aXZld2luZG93Lk5hdGl2ZVN1
cmZhY2U7CmltcG9ydCBqYXZheC5tZWRpYS5uYXRpdmV3aW5kb3cuTmF0aXZlV2luZG93RmFjdG9y
eTsKaW1wb3J0IGphdmF4Lm1lZGlhLm5hdGl2ZXdpbmRvdy5Qcm94eVN1cmZhY2U7CmltcG9ydCBq
YXZheC5tZWRpYS5uYXRpdmV3aW5kb3cuUHJveHlTdXJmYWNlLlVwc3RyZWFtU3VyZmFjZUhvb2s7
CmltcG9ydCBqYXZheC5tZWRpYS5uYXRpdmV3aW5kb3cuVmlzdWFsSURIb2xkZXI7CmltcG9ydCBq
YXZheC5tZWRpYS5vcGVuZ2wuR0xDYXBhYmlsaXRpZXM7CmltcG9ydCBqYXZheC5tZWRpYS5vcGVu
Z2wuR0xDYXBhYmlsaXRpZXNDaG9vc2VyOwppbXBvcnQgamF2YXgubWVkaWEub3BlbmdsLkdMQ2Fw
YWJpbGl0aWVzSW1tdXRhYmxlOwppbXBvcnQgamF2YXgubWVkaWEub3BlbmdsLkdMQ29udGV4dDsK
aW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5HTERyYXdhYmxlOwppbXBvcnQgamF2YXgubWVkaWEu
b3BlbmdsLkdMRXhjZXB0aW9uOwppbXBvcnQgamF2YXgubWVkaWEub3BlbmdsLkdMUHJvZmlsZTsK
aW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5HTFByb2ZpbGUuU2h1dGRvd25UeXBlOwoKaW1wb3J0
IGpvZ2FtcC5uYXRpdmV3aW5kb3cueDExLlgxMUxpYjsKaW1wb3J0IGpvZ2FtcC5uYXRpdmV3aW5k
b3cueDExLlgxMVV0aWw7CmltcG9ydCBqb2dhbXAub3BlbmdsLkRlc2t0b3BHTER5bmFtaWNMb29r
dXBIZWxwZXI7CmltcG9ydCBqb2dhbXAub3BlbmdsLkdMQ29udGV4dEltcGw7CmltcG9ydCBqb2dh
bXAub3BlbmdsLkdMRHJhd2FibGVGYWN0b3J5SW1wbDsKaW1wb3J0IGpvZ2FtcC5vcGVuZ2wuR0xE
cmF3YWJsZUltcGw7CmltcG9ydCBqb2dhbXAub3BlbmdsLkdMRHluYW1pY0xvb2t1cEhlbHBlcjsK
aW1wb3J0IGpvZ2FtcC5vcGVuZ2wuR0xHcmFwaGljc0NvbmZpZ3VyYXRpb25VdGlsOwppbXBvcnQg
am9nYW1wLm9wZW5nbC5TaGFyZWRSZXNvdXJjZVJ1bm5lcjsKCmltcG9ydCBjb20uam9nYW1wLmNv
bW1vbi51dGlsLlZlcnNpb25OdW1iZXI7CmltcG9ydCBjb20uam9nYW1wLm5hdGl2ZXdpbmRvdy5X
cmFwcGVkU3VyZmFjZTsKaW1wb3J0IGNvbS5qb2dhbXAubmF0aXZld2luZG93LngxMS5YMTFHcmFw
aGljc0RldmljZTsKaW1wb3J0IGNvbS5qb2dhbXAubmF0aXZld2luZG93LngxMS5YMTFHcmFwaGlj
c1NjcmVlbjsKCnB1YmxpYyBjbGFzcyBYMTFHTFhEcmF3YWJsZUZhY3RvcnkgZXh0ZW5kcyBHTERy
YXdhYmxlRmFjdG9yeUltcGwgewoKICBwdWJsaWMgc3RhdGljIGZpbmFsIFZlcnNpb25OdW1iZXIg
dmVyc2lvbk9uZVplcm8gPSBuZXcgVmVyc2lvbk51bWJlcigxLCAwLCAwKTsKICBwdWJsaWMgc3Rh
dGljIGZpbmFsIFZlcnNpb25OdW1iZXIgdmVyc2lvbk9uZU9uZSA9IG5ldyBWZXJzaW9uTnVtYmVy
KDEsIDEsIDApOwogIHB1YmxpYyBzdGF0aWMgZmluYWwgVmVyc2lvbk51bWJlciB2ZXJzaW9uT25l
VHdvID0gbmV3IFZlcnNpb25OdW1iZXIoMSwgMiwgMCk7CiAgcHVibGljIHN0YXRpYyBmaW5hbCBW
ZXJzaW9uTnVtYmVyIHZlcnNpb25PbmVUaHJlZSA9IG5ldyBWZXJzaW9uTnVtYmVyKDEsIDMsIDAp
OwogIHB1YmxpYyBzdGF0aWMgZmluYWwgVmVyc2lvbk51bWJlciB2ZXJzaW9uT25lRm91ciA9IG5l
dyBWZXJzaW9uTnVtYmVyKDEsIDQsIDApOwoKICBzdGF0aWMgZmluYWwgU3RyaW5nIEdMWF9TR0lY
X3BidWZmZXIgPSAiR0xYX1NHSVhfcGJ1ZmZlciI7CiAgCiAgcHJpdmF0ZSBzdGF0aWMgRGVza3Rv
cEdMRHluYW1pY0xvb2t1cEhlbHBlciB4MTFHTFhEeW5hbWljTG9va3VwSGVscGVyID0gbnVsbDsK
CiAgLy8gU3ZlbiAtIHRoZSAiZ2V0U2NyZWVuTnVtYmVyRnJvbSIgbWV0aG9kIHNob3VsZCBiZSBl
dmFsdWF0ZWQgZnVydGhlci4gIEl0IHdvcmtzCiAgLy8gd2VsbCBlbm91Z2gsIGJ1dCBlaXRoZXIg
YSkgdGhlIGluZm8gaXQgcGFyc2VzIGZyb20gdGhlIGNvbm5lY3Rpb24gbWF5IGFscmVhZHkKICAv
LyBiZSBhdmFpbGFibGUgaW4gbW9yZSBjb252ZW5pZW50IGZvcm0gZWxzZXdoZXJlIGF0IHRoZSBw
b2ludHMgd2hlcmUgdGhpcyBtZXRob2QKICAvLyBpcyBjYWxsZWQsIG9yIGIpIHRoaXMgbWV0aG9k
IC0gZ2VpbmcgYSBzb3J0IG9mIGdlbmVyYWwgdXRpbGl0eSAtIHNob3VsZCBiZQogIC8vIGxvY2F0
ZWQgZWxzZXdoZXJlLCBhbG9uZyB3aXRoIHNpbWlsYXIgWDExLXNwZWNpZmljIHV0aWxpdGllcy4K
ICBzdGF0aWMgaW50IGdldFNjcmVlbk51bWJlckZyb20oIFN0cmluZyBjb25uZWN0aW9uICkgewog
ICAgaW50IHNjcmVlbk51bWJlciA9IDAgOwogICAgLy8gR28gdG8gdGhlIGNvbG9uIGZpcnN0IHNp
bmNlIHRoZXJlIG1heSBiZSBhIGhvc3QgbmFtZSB0byB0aGUgbGVmdCBjb250YWluaW5nIGRvdHMu
CiAgICBpbnQgY29sb25JbmRleCA9IGNvbm5lY3Rpb24gIT0gbnVsbCAmJiBjb25uZWN0aW9uLmxl
bmd0aCgpID4gMCA/IGNvbm5lY3Rpb24uaW5kZXhPZiggJzonICkgOiAtMSA7CiAgICBpZiggY29s
b25JbmRleCA+PSAwICkgewogICAgICBTdHJpbmcgZGlzcGxheUFuZFNjcmVlbiA9IGNvbm5lY3Rp
b24uc3Vic3RyaW5nKCBjb2xvbkluZGV4ICsgMSApIDsKICAgICAgaW50IGRvdEluZGV4ID0gZGlz
cGxheUFuZFNjcmVlbi5pbmRleE9mKCAnLicgKSA7CiAgICAgIGlmKCBkb3RJbmRleCA+PSAwICkg
ewogICAgICAgIHRyeSB7CiAgICAgICAgICBzY3JlZW5OdW1iZXIgPSBJbnRlZ2VyLnBhcnNlSW50
KCBkaXNwbGF5QW5kU2NyZWVuLnN1YnN0cmluZyggZG90SW5kZXggKyAxICkgKSA7CiAgICAgICAg
fSBjYXRjaCggVGhyb3dhYmxlIHQgKSB7CiAgICAgICAgICAvLyBGSVhNRT8gLSB3aGF0IHNob3Vs
ZCB3ZSBkbyBoZXJlPwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHNjcmVlbk51
bWJlciA7CiAgfQoKICBwdWJsaWMgWDExR0xYRHJhd2FibGVGYWN0b3J5KCkgewogICAgc3VwZXIo
KTsKCiAgICBzeW5jaHJvbml6ZWQoWDExR0xYRHJhd2FibGVGYWN0b3J5LmNsYXNzKSB7CiAgICAg
ICAgaWYobnVsbD09eDExR0xYRHluYW1pY0xvb2t1cEhlbHBlcikgewogICAgICAgICAgICBEZXNr
dG9wR0xEeW5hbWljTG9va3VwSGVscGVyIHRtcCA9IG51bGw7CiAgICAgICAgICAgIHRyeSB7CiAg
ICAgICAgICAgICAgICB0bXAgPSBuZXcgRGVza3RvcEdMRHluYW1pY0xvb2t1cEhlbHBlcihuZXcg
WDExR0xYRHluYW1pY0xpYnJhcnlCdW5kbGVJbmZvKCkpOwogICAgICAgICAgICB9IGNhdGNoIChH
TEV4Y2VwdGlvbiBnbGUpIHsKICAgICAgICAgICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAg
ICAgICAgICAgZ2xlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGlmKG51bGwhPXRtcCAmJiB0bXAuaXNMaWJDb21wbGV0ZSgpKSB7
CiAgICAgICAgICAgICAgICB4MTFHTFhEeW5hbWljTG9va3VwSGVscGVyID0gdG1wOwogICAgICAg
ICAgICAgICAgR0xYLmdldEdMWFByb2NBZGRyZXNzVGFibGUoKS5yZXNldCh4MTFHTFhEeW5hbWlj
TG9va3VwSGVscGVyKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBkZWZhdWx0
RGV2aWNlID0gbmV3IFgxMUdyYXBoaWNzRGV2aWNlKFgxMVV0aWwuZ2V0TnVsbERpc3BsYXlOYW1l
KCksIEFic3RyYWN0R3JhcGhpY3NEZXZpY2UuREVGQVVMVF9VTklUKTsKCiAgICBpZihudWxsIT14
MTFHTFhEeW5hbWljTG9va3VwSGVscGVyKSB7CiAgICAgICAgLy8gUmVnaXN0ZXIgb3VyIEdyYXBo
aWNzQ29uZmlndXJhdGlvbkZhY3RvcnkgaW1wbGVtZW50YXRpb25zCiAgICAgICAgLy8gVGhlIGFj
dCBvZiBjb25zdHJ1Y3RpbmcgdGhlbSBjYXVzZXMgdGhlbSB0byBiZSByZWdpc3RlcmVkCiAgICAg
ICAgWDExR0xYR3JhcGhpY3NDb25maWd1cmF0aW9uRmFjdG9yeS5yZWdpc3RlckZhY3RvcnkoKTsK
CiAgICAgICAgc2hhcmVkTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTaGFyZWRSZXNvdXJjZVJ1
bm5lci5SZXNvdXJjZT4oKTsKCiAgICAgICAgLy8gSW5pdCBzaGFyZWQgcmVzb3VyY2VzIG9mZiB0
aHJlYWQKICAgICAgICAvLyBXaWxsIGJlIHJlbGVhc2VkIHZpYSBTaHV0ZG93bkhvb2sKICAgICAg
ICBzaGFyZWRSZXNvdXJjZVJ1bm5lciA9IG5ldyBTaGFyZWRSZXNvdXJjZVJ1bm5lcihuZXcgU2hh
cmVkUmVzb3VyY2VJbXBsZW1lbnRhdGlvbigpKTsKICAgICAgICBzaGFyZWRSZXNvdXJjZVJ1bm5l
ci5zdGFydCgpOwogICAgfQogIH0KCiAgQE92ZXJyaWRlCiAgcHJvdGVjdGVkIGZpbmFsIHZvaWQg
ZGVzdHJveShTaHV0ZG93blR5cGUgc2h1dGRvd25UeXBlKSB7CiAgICBpZihudWxsICE9IHNoYXJl
ZFJlc291cmNlUnVubmVyKSB7CiAgICAgICAgc2hhcmVkUmVzb3VyY2VSdW5uZXIuc3RvcCgpOwog
ICAgICAgIHNoYXJlZFJlc291cmNlUnVubmVyID0gbnVsbDsKICAgIH0KICAgIGlmKG51bGwgIT0g
c2hhcmVkTWFwKSB7CiAgICAgICAgc2hhcmVkTWFwLmNsZWFyKCk7CiAgICAgICAgc2hhcmVkTWFw
ID0gbnVsbDsKICAgIH0KICAgIGRlZmF1bHREZXZpY2UgPSBudWxsOwogICAgLyoqCiAgICAgKiBQ
dWxsaW5nIGF3YXkgdGhlIG5hdGl2ZSBsaWJyYXJ5IG1heSBjYXVzZSBoYXZvYyAuLgogICAgICoK
ICAgIGlmKFNodXRkb3duVHlwZS5DT01QTEVURSA9PSBzaHV0ZG93blR5cGUgJiYgbnVsbCAhPSB4
MTFHTFhEeW5hbWljTG9va3VwSGVscGVyKSB7CiAgICAgICAgeDExR0xYRHluYW1pY0xvb2t1cEhl
bHBlci5kZXN0cm95KCk7CiAgICAgICAgeDExR0xYRHluYW1pY0xvb2t1cEhlbHBlciA9IG51bGw7
CiAgICB9ICovCgogICAgLy8gRG9uJ3QgcmVhbGx5IGNsb3NlIHBlbmRpbmcgRGlzcGxheSBjb25u
ZWN0aW9ucywKICAgIC8vIHNpbmNlIHRoaXMgbWF5IHRyaWdnZXIgYSBKVk0gZXhjZXB0aW9uCiAg
ICBYMTFVdGlsLnNodXRkb3duKCBmYWxzZSwgREVCVUcgKTsKICB9CgogIEBPdmVycmlkZQogIHB1
YmxpYyBmaW5hbCBHTER5bmFtaWNMb29rdXBIZWxwZXIgZ2V0R0xEeW5hbWljTG9va3VwSGVscGVy
KGludCBwcm9maWxlKSB7CiAgICAgIHJldHVybiB4MTFHTFhEeW5hbWljTG9va3VwSGVscGVyOwog
IH0KCiAgcHJpdmF0ZSBYMTFHcmFwaGljc0RldmljZSBkZWZhdWx0RGV2aWNlOwogIHByaXZhdGUg
U2hhcmVkUmVzb3VyY2VSdW5uZXIgc2hhcmVkUmVzb3VyY2VSdW5uZXI7CiAgcHJpdmF0ZSBIYXNo
TWFwPFN0cmluZyAvKiBjb25uZWN0aW9uICovLCBTaGFyZWRSZXNvdXJjZVJ1bm5lci5SZXNvdXJj
ZT4gc2hhcmVkTWFwOwoKICBzdGF0aWMgY2xhc3MgU2hhcmVkUmVzb3VyY2UgaW1wbGVtZW50cyBT
aGFyZWRSZXNvdXJjZVJ1bm5lci5SZXNvdXJjZSB7CiAgICAgIFgxMUdyYXBoaWNzRGV2aWNlIGRl
dmljZTsKICAgICAgWDExR3JhcGhpY3NTY3JlZW4gc2NyZWVuOwogICAgICBHTERyYXdhYmxlSW1w
bCBkcmF3YWJsZTsKICAgICAgR0xDb250ZXh0SW1wbCBjb250ZXh0OwogICAgICBTdHJpbmcgZ2xY
U2VydmVyVmVuZG9yTmFtZTsKICAgICAgYm9vbGVhbiBpc0dMWFNlcnZlclZlbmRvckFUSTsKICAg
ICAgYm9vbGVhbiBpc0dMWFNlcnZlclZlbmRvck5WSURJQTsKICAgICAgVmVyc2lvbk51bWJlciBn
bFhTZXJ2ZXJWZXJzaW9uOwogICAgICBib29sZWFuIGdsWFNlcnZlclZlcnNpb25PbmVPbmVDYXBh
YmxlOwogICAgICBib29sZWFuIGdsWFNlcnZlclZlcnNpb25PbmVUaHJlZUNhcGFibGU7CiAgICAg
IGJvb2xlYW4gZ2xYTXVsdGlzYW1wbGVBdmFpbGFibGU7CgogICAgICBTaGFyZWRSZXNvdXJjZShY
MTFHcmFwaGljc0RldmljZSBkZXYsIFgxMUdyYXBoaWNzU2NyZWVuIHNjcm4sCiAgICAgICAgICAg
ICAgICAgICAgIEdMRHJhd2FibGVJbXBsIGRyYXcsIEdMQ29udGV4dEltcGwgY3R4LAogICAgICAg
ICAgICAgICAgICAgICBWZXJzaW9uTnVtYmVyIGdsWFNlcnZlclZlciwgU3RyaW5nIGdsWFNlcnZl
clZlbmRvciwgYm9vbGVhbiBnbFhTZXJ2ZXJNdWx0aXNhbXBsZUF2YWlsKSB7CiAgICAgICAgICBk
ZXZpY2UgPSBkZXY7CiAgICAgICAgICBzY3JlZW4gPSBzY3JuOwogICAgICAgICAgZHJhd2FibGUg
PSBkcmF3OwogICAgICAgICAgY29udGV4dCA9IGN0eDsKICAgICAgICAgIGdsWFNlcnZlclZlcnNp
b24gPSBnbFhTZXJ2ZXJWZXI7CiAgICAgICAgICBnbFhTZXJ2ZXJWZXJzaW9uT25lT25lQ2FwYWJs
ZSA9IGdsWFNlcnZlclZlcnNpb24uY29tcGFyZVRvKHZlcnNpb25PbmVPbmUpID49IDAgOwogICAg
ICAgICAgZ2xYU2VydmVyVmVyc2lvbk9uZVRocmVlQ2FwYWJsZSA9IGdsWFNlcnZlclZlcnNpb24u
Y29tcGFyZVRvKHZlcnNpb25PbmVUaHJlZSkgPj0gMCA7CiAgICAgICAgICBnbFhTZXJ2ZXJWZW5k
b3JOYW1lID0gZ2xYU2VydmVyVmVuZG9yOwogICAgICAgICAgaXNHTFhTZXJ2ZXJWZW5kb3JBVEkg
PSBHTFhVdGlsLmlzVmVuZG9yQVRJKGdsWFNlcnZlclZlbmRvck5hbWUpOwogICAgICAgICAgaXNH
TFhTZXJ2ZXJWZW5kb3JOVklESUEgPSBHTFhVdGlsLmlzVmVuZG9yTlZJRElBKGdsWFNlcnZlclZl
bmRvck5hbWUpOwogICAgICAgICAgZ2xYTXVsdGlzYW1wbGVBdmFpbGFibGUgPSBnbFhTZXJ2ZXJN
dWx0aXNhbXBsZUF2YWlsOwogICAgICB9CiAgICAgIEBPdmVycmlkZQogICAgICBmaW5hbCBwdWJs
aWMgQWJzdHJhY3RHcmFwaGljc0RldmljZSBnZXREZXZpY2UoKSB7IHJldHVybiBkZXZpY2U7IH0K
ICAgICAgQE92ZXJyaWRlCiAgICAgIGZpbmFsIHB1YmxpYyBBYnN0cmFjdEdyYXBoaWNzU2NyZWVu
IGdldFNjcmVlbigpIHsgcmV0dXJuIHNjcmVlbjsgfQogICAgICBAT3ZlcnJpZGUKICAgICAgZmlu
YWwgcHVibGljIEdMRHJhd2FibGVJbXBsIGdldERyYXdhYmxlKCkgeyByZXR1cm4gZHJhd2FibGU7
IH0KICAgICAgQE92ZXJyaWRlCiAgICAgIGZpbmFsIHB1YmxpYyBHTENvbnRleHRJbXBsIGdldENv
bnRleHQoKSB7IHJldHVybiBjb250ZXh0OyB9CgogICAgICBmaW5hbCBTdHJpbmcgZ2V0R0xYVmVu
ZG9yTmFtZSgpIHsgcmV0dXJuIGdsWFNlcnZlclZlbmRvck5hbWU7IH0KICAgICAgZmluYWwgYm9v
bGVhbiBpc0dMWFZlbmRvckFUSSgpIHsgcmV0dXJuIGlzR0xYU2VydmVyVmVuZG9yQVRJOyB9CiAg
ICAgIGZpbmFsIGJvb2xlYW4gaXNHTFhWZW5kb3JOVklESUEoKSB7IHJldHVybiBpc0dMWFNlcnZl
clZlbmRvck5WSURJQTsgfQogICAgICBmaW5hbCBWZXJzaW9uTnVtYmVyIGdldEdMWFZlcnNpb24o
KSB7IHJldHVybiBnbFhTZXJ2ZXJWZXJzaW9uOyB9CiAgICAgIGZpbmFsIGJvb2xlYW4gaXNHTFhW
ZXJzaW9uR3JlYXRlckVxdWFsT25lT25lKCkgeyByZXR1cm4gZ2xYU2VydmVyVmVyc2lvbk9uZU9u
ZUNhcGFibGU7IH0KICAgICAgZmluYWwgYm9vbGVhbiBpc0dMWFZlcnNpb25HcmVhdGVyRXF1YWxP
bmVUaHJlZSgpIHsgcmV0dXJuIGdsWFNlcnZlclZlcnNpb25PbmVUaHJlZUNhcGFibGU7IH0KICAg
ICAgZmluYWwgYm9vbGVhbiBpc0dMWE11bHRpc2FtcGxlQXZhaWxhYmxlKCkgeyByZXR1cm4gZ2xY
TXVsdGlzYW1wbGVBdmFpbGFibGU7IH0KICB9CgogIGNsYXNzIFNoYXJlZFJlc291cmNlSW1wbGVt
ZW50YXRpb24gaW1wbGVtZW50cyBTaGFyZWRSZXNvdXJjZVJ1bm5lci5JbXBsZW1lbnRhdGlvbiB7
CiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIHZvaWQgY2xlYXIoKSB7CiAgICAgICAg
ICAgIHN5bmNocm9uaXplZChzaGFyZWRNYXApIHsKICAgICAgICAgICAgICAgIHNoYXJlZE1hcC5j
bGVhcigpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIEBPdmVycmlkZQogICAgICAg
IHB1YmxpYyBTaGFyZWRSZXNvdXJjZVJ1bm5lci5SZXNvdXJjZSBtYXBQdXQoU3RyaW5nIGNvbm5l
Y3Rpb24sIFNoYXJlZFJlc291cmNlUnVubmVyLlJlc291cmNlIHJlc291cmNlKSB7CiAgICAgICAg
ICAgIHN5bmNocm9uaXplZChzaGFyZWRNYXApIHsKICAgICAgICAgICAgICAgIHJldHVybiBzaGFy
ZWRNYXAucHV0KGNvbm5lY3Rpb24sIHJlc291cmNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgICBAT3ZlcnJpZGUKICAgICAgICBwdWJsaWMgU2hhcmVkUmVzb3VyY2VSdW5uZXIuUmVz
b3VyY2UgbWFwR2V0KFN0cmluZyBjb25uZWN0aW9uKSB7CiAgICAgICAgICAgIHN5bmNocm9uaXpl
ZChzaGFyZWRNYXApIHsKICAgICAgICAgICAgICAgIHJldHVybiBzaGFyZWRNYXAuZ2V0KGNvbm5l
Y3Rpb24pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIEBPdmVycmlkZQogICAgICAg
IHB1YmxpYyBDb2xsZWN0aW9uPFNoYXJlZFJlc291cmNlUnVubmVyLlJlc291cmNlPiBtYXBWYWx1
ZXMoKSB7CiAgICAgICAgICAgIHN5bmNocm9uaXplZChzaGFyZWRNYXApIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBzaGFyZWRNYXAudmFsdWVzKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9Cgog
ICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyBTaGFyZWRSZXNvdXJjZVJ1bm5lci5SZXNv
dXJjZSBjcmVhdGVTaGFyZWRSZXNvdXJjZShTdHJpbmcgY29ubmVjdGlvbikgewogICAgICAgICAg
ICBmaW5hbCBYMTFHcmFwaGljc0RldmljZSBzaGFyZWREZXZpY2UgPQogICAgICAgICAgICAgICAg
ICAgIG5ldyBYMTFHcmFwaGljc0RldmljZShYMTFVdGlsLm9wZW5EaXNwbGF5KGNvbm5lY3Rpb24p
LCBBYnN0cmFjdEdyYXBoaWNzRGV2aWNlLkRFRkFVTFRfVU5JVCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7IC8vIG93biBub24tc2hhcmVkIGRpc3BsYXkg
Y29ubmVjdGlvbiwgdy8gbG9ja2luZwogICAgICAgICAgICAgICAgICAgIC8vIG5ldyBYMTFHcmFw
aGljc0RldmljZShYMTFVdGlsLm9wZW5EaXNwbGF5KGNvbm5lY3Rpb24pLCBBYnN0cmFjdEdyYXBo
aWNzRGV2aWNlLkRFRkFVTFRfVU5JVCwKICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgTmF0aXZlV2luZG93RmFjdG9yeS5nZXROdWxsVG9vbGtpdExvY2soKSwgdHJ1
ZSk7IC8vIG93biBub24tc2hhcmVkIGRpc3BsYXkgY29ubmVjdGlvbiwgdy9vIGxvY2tpbmcKICAg
ICAgICAgICAgc2hhcmVkRGV2aWNlLmxvY2soKTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAg
ICAgICAgIGZpbmFsIFgxMUdyYXBoaWNzU2NyZWVuIHNoYXJlZFNjcmVlbiA9IG5ldyBYMTFHcmFw
aGljc1NjcmVlbihzaGFyZWREZXZpY2UsIFgxMUdMWERyYXdhYmxlRmFjdG9yeS5nZXRTY3JlZW5O
dW1iZXJGcm9tKGNvbm5lY3Rpb24pICk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
IGlmKCFHTFhVdGlsLmlzR0xYQXZhaWxhYmxlT25TZXJ2ZXIoc2hhcmVkRGV2aWNlKSkgewogICAg
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBHTEV4Y2VwdGlvbigiR0xYIG5vdCBhdmFpbGFibGUg
b24gZGV2aWNlL3NlcnZlcjogIitzaGFyZWREZXZpY2UpOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgR0xYVXRpbC5pbml0R0xYQ2xpZW50RGF0YVNpbmdsZXRvbihzaGFyZWREZXZp
Y2UpOwogICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGdsWFNlcnZlclZlbmRvck5hbWUgPSBH
TFguZ2xYUXVlcnlTZXJ2ZXJTdHJpbmcoc2hhcmVkRGV2aWNlLmdldEhhbmRsZSgpLCAwLCBHTFgu
R0xYX1ZFTkRPUik7CiAgICAgICAgICAgICAgICBmaW5hbCBWZXJzaW9uTnVtYmVyIGdsWFNlcnZl
clZlcnNpb24gPSBHTFhVdGlsLmdldEdMWFNlcnZlclZlcnNpb25OdW1iZXIoc2hhcmVkRGV2aWNl
LmdldEhhbmRsZSgpKTsKICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZ2xYU2VydmVyTXVs
dGlzYW1wbGVBdmFpbGFibGUgPSBHTFhVdGlsLmlzTXVsdGlzYW1wbGVBdmFpbGFibGUoR0xYLmds
WFF1ZXJ5U2VydmVyU3RyaW5nKHNoYXJlZERldmljZS5nZXRIYW5kbGUoKSwgMCwgR0xYLkdMWF9F
WFRFTlNJT05TKSk7CiAgICAgICAgICAgICAgICBpZihYMTFVdGlsLkFUSV9IQVNfWENMT1NFRElT
UExBWV9CVUcgJiYgR0xYVXRpbC5pc1ZlbmRvckFUSShnbFhTZXJ2ZXJWZW5kb3JOYW1lKSkgewog
ICAgICAgICAgICAgICAgICAgIFgxMVV0aWwuc2V0TWFya0FsbERpc3BsYXlzVW5jbG9zYWJsZSh0
cnVlKTsKICAgICAgICAgICAgICAgICAgICBYMTFVdGlsLm1hcmtEaXNwbGF5VW5jbG9zZWFibGUo
c2hhcmVkRGV2aWNlLmdldEhhbmRsZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgZmluYWwgR0xQcm9maWxlIGdscCA9IEdMUHJvZmlsZS5nZXQo
c2hhcmVkRGV2aWNlLCBHTFByb2ZpbGUuR0xfUFJPRklMRV9MSVNUX01JTl9ERVNLVE9QLCBmYWxz
ZSk7CiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBnbHApIHsKICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgR0xFeGNlcHRpb24oIkNvdWxkbid0IGdldCBkZWZhdWx0IEdMUHJvZmlsZSBm
b3IgZGV2aWNlOiAiK3NoYXJlZERldmljZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgIGZpbmFsIEdMRHJhd2FibGVJbXBsIHNoYXJlZERyYXdhYmxl
ID0gY3JlYXRlT25zY3JlZW5EcmF3YWJsZUltcGwoY3JlYXRlRHVtbXlTdXJmYWNlSW1wbChzaGFy
ZWREZXZpY2UsIGZhbHNlLCBuZXcgR0xDYXBhYmlsaXRpZXMoZ2xwKSwgbnVsbCwgNjQsIDY0KSk7
CiAgICAgICAgICAgICAgICBzaGFyZWREcmF3YWJsZS5zZXRSZWFsaXplZCh0cnVlKTsKICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgZmluYWwgR0xDb250ZXh0SW1wbCBzaGFyZWRDb250
ZXh0ID0gKEdMQ29udGV4dEltcGwpIHNoYXJlZERyYXdhYmxlLmNyZWF0ZUNvbnRleHQobnVsbCk7
CiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBzaGFyZWRDb250ZXh0KSB7CiAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEdMRXhjZXB0aW9uKCJDb3VsZG4ndCBjcmVhdGUgc2hhcmVkIGNv
bnRleHQgZm9yIGRyYXdhYmxlOiAiK3NoYXJlZERyYXdhYmxlKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgYm9vbGVhbiBtYWRlQ3VycmVudCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgc2hhcmVkQ29udGV4dC5tYWtlQ3VycmVudCgpOwogICAgICAg
ICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBtYWRlQ3VycmVudCA9IHNoYXJlZENv
bnRleHQuaXNDdXJyZW50KCk7CiAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAg
ICAgICAgICAgIHNoYXJlZENvbnRleHQucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5w
cmludGxuKCJTaGFyZWREZXZpY2U6ICAiICsgc2hhcmVkRGV2aWNlKTsKICAgICAgICAgICAgICAg
ICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlNoYXJlZFNjcmVlbjogICIgKyBzaGFyZWRTY3JlZW4p
OwogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiU2hhcmVkQ29udGV4dDog
IiArIHNoYXJlZENvbnRleHQgKyAiLCBtYWRlQ3VycmVudCAiICsgbWFkZUN1cnJlbnQpOwogICAg
ICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR0xYIFNlcnZlciBWZW5kb3I6ICAg
ICAgIiArIGdsWFNlcnZlclZlbmRvck5hbWUpOwogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5l
cnIucHJpbnRsbigiR0xYIFNlcnZlciBWZXJzaW9uOiAgICAgIiArIGdsWFNlcnZlclZlcnNpb24p
OwogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR0xYIFNlcnZlciBNdWx0
aXNhbXBsZTogIiArIGdsWFNlcnZlck11bHRpc2FtcGxlQXZhaWxhYmxlKTsKICAgICAgICAgICAg
ICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkdMWCBDbGllbnQgVmVuZG9yOiAgICAgICIgKyBH
TFhVdGlsLmdldENsaWVudFZlbmRvck5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgU3lzdGVt
LmVyci5wcmludGxuKCJHTFggQ2xpZW50IFZlcnNpb246ICAgICAiICsgR0xYVXRpbC5nZXRDbGll
bnRWZXJzaW9uTnVtYmVyKCkpOwogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRs
bigiR0xYIENsaWVudCBNdWx0aXNhbXBsZTogIiArIEdMWFV0aWwuaXNDbGllbnRNdWx0aXNhbXBs
ZUF2YWlsYWJsZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBu
ZXcgU2hhcmVkUmVzb3VyY2Uoc2hhcmVkRGV2aWNlLCBzaGFyZWRTY3JlZW4sIHNoYXJlZERyYXdh
YmxlLCBzaGFyZWRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbFhTZXJ2ZXJWZXJzaW9uLCBnbFhTZXJ2ZXJWZW5kb3JOYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbFhTZXJ2ZXJNdWx0aXNhbXBsZUF2YWlsYWJs
ZSAmJiBHTFhVdGlsLmlzQ2xpZW50TXVsdGlzYW1wbGVBdmFpbGFibGUoKSk7CiAgICAgICAgICAg
IH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR0xFeGNl
cHRpb24oIlgxMUdMWERyYXdhYmxlRmFjdG9yeSAtIENvdWxkIG5vdCBpbml0aWFsaXplIHNoYXJl
ZCByZXNvdXJjZXMgZm9yICIrY29ubmVjdGlvbiwgdCk7CiAgICAgICAgICAgIH0gZmluYWxseSB7
CiAgICAgICAgICAgICAgICBzaGFyZWREZXZpY2UudW5sb2NrKCk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CgogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VTaGFy
ZWRSZXNvdXJjZShTaGFyZWRSZXNvdXJjZVJ1bm5lci5SZXNvdXJjZSBzaGFyZWQpIHsKICAgICAg
ICAgICAgU2hhcmVkUmVzb3VyY2Ugc3IgPSAoU2hhcmVkUmVzb3VyY2UpIHNoYXJlZDsKICAgICAg
ICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlNo
dXRkb3duIFNoYXJlZDoiKTsKICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRGV2
aWNlICA6ICIgKyBzci5kZXZpY2UpOwogICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxu
KCJTY3JlZW4gIDogIiArIHNyLnNjcmVlbik7CiAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnBy
aW50bG4oIkRyYXdhYmxlOiAiICsgc3IuZHJhd2FibGUpOwogICAgICAgICAgICAgICAgU3lzdGVt
LmVyci5wcmludGxuKCJDVFggICAgIDogIiArIHNyLmNvbnRleHQpOwogICAgICAgICAgICAgICAg
VGhyZWFkLmR1bXBTdGFjaygpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobnVsbCAh
PSBzci5jb250ZXh0KSB7CiAgICAgICAgICAgICAgICAvLyBtYXkgY2F1c2UgSlZNIFNJR1NFR1Y6
CiAgICAgICAgICAgICAgICBzci5jb250ZXh0LmRlc3Ryb3koKTsgLy8gd2lsbCBhbHNvIHB1bGwg
dGhlIGR1bW15IE11dHVhYmxlU3VyZmFjZQogICAgICAgICAgICAgICAgc3IuY29udGV4dCA9IG51
bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChudWxsICE9IHNyLmRyYXdhYmxlKSB7
CiAgICAgICAgICAgICAgICAvLyBtYXkgY2F1c2UgSlZNIFNJR1NFR1Y6CiAgICAgICAgICAgICAg
ICBzci5kcmF3YWJsZS5zZXRSZWFsaXplZChmYWxzZSk7CiAgICAgICAgICAgICAgICBzci5kcmF3
YWJsZSA9IG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChudWxsICE9IHNyLnNj
cmVlbikgewogICAgICAgICAgICAgICAgc3Iuc2NyZWVuID0gbnVsbDsKICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgaWYgKG51bGwgIT0gc3IuZGV2aWNlKSB7CiAgICAgICAgICAgICAgICAvLyBt
YXkgY2F1c2UgSlZNIFNJR1NFR1Y6CiAgICAgICAgICAgICAgICBzci5kZXZpY2UuY2xvc2UoKTsK
ICAgICAgICAgICAgICAgIHNyLmRldmljZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgfQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgZmluYWwgQWJzdHJhY3RHcmFwaGljc0RldmljZSBn
ZXREZWZhdWx0RGV2aWNlKCkgewogICAgICByZXR1cm4gZGVmYXVsdERldmljZTsKICB9CgogIEBP
dmVycmlkZQogIHB1YmxpYyBmaW5hbCBib29sZWFuIGdldElzRGV2aWNlQ29tcGF0aWJsZShBYnN0
cmFjdEdyYXBoaWNzRGV2aWNlIGRldmljZSkgewogICAgICBpZihudWxsICE9IHgxMUdMWER5bmFt
aWNMb29rdXBIZWxwZXIgJiYgZGV2aWNlIGluc3RhbmNlb2YgWDExR3JhcGhpY3NEZXZpY2UpIHsK
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICB9Cgog
IEBPdmVycmlkZQogIHByb3RlY3RlZCBmaW5hbCBUaHJlYWQgZ2V0U2hhcmVkUmVzb3VyY2VUaHJl
YWQoKSB7CiAgICByZXR1cm4gc2hhcmVkUmVzb3VyY2VSdW5uZXIuc3RhcnQoKTsKICB9CgogIEBP
dmVycmlkZQogIHByb3RlY3RlZCBmaW5hbCBib29sZWFuIGNyZWF0ZVNoYXJlZFJlc291cmNlKEFi
c3RyYWN0R3JhcGhpY3NEZXZpY2UgZGV2aWNlKSB7CiAgICB0cnkgewogICAgICAgIFNoYXJlZFJl
c291cmNlUnVubmVyLlJlc291cmNlIHNyID0gc2hhcmVkUmVzb3VyY2VSdW5uZXIuZ2V0T3JDcmVh
dGVTaGFyZWQoZGV2aWNlKTsKICAgICAgICBpZihudWxsIT1zcikgewogICAgICAgICAgcmV0dXJu
IG51bGwgIT0gc3IuZ2V0Q29udGV4dCgpOwogICAgICAgIH0KICAgIH0gY2F0Y2ggKEdMRXhjZXB0
aW9uIGdsZSkgewogICAgICAgIGlmKERFQlVHKSB7CiAgICAgICAgICAgIFN5c3RlbS5lcnIucHJp
bnRsbigiQ2F0Y2hlZCBFeGNlcHRpb24gd2hpbGUgWDExR0xYIFNoYXJlZCBSZXNvdXJjZSBpbml0
aWFsaXphdGlvbiIpOwogICAgICAgICAgICBnbGUucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAg
fQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQE92ZXJyaWRlCiAgcHJvdGVjdGVkIGZp
bmFsIEdMQ29udGV4dCBnZXRPckNyZWF0ZVNoYXJlZENvbnRleHRJbXBsKEFic3RyYWN0R3JhcGhp
Y3NEZXZpY2UgZGV2aWNlKSB7CiAgICBTaGFyZWRSZXNvdXJjZVJ1bm5lci5SZXNvdXJjZSBzciA9
IHNoYXJlZFJlc291cmNlUnVubmVyLmdldE9yQ3JlYXRlU2hhcmVkKGRldmljZSk7CiAgICBpZihu
dWxsIT1zcikgewogICAgICByZXR1cm4gc3IuZ2V0Q29udGV4dCgpOwogICAgfQogICAgcmV0dXJu
IG51bGw7CiAgfQoKICBAT3ZlcnJpZGUKICBwcm90ZWN0ZWQgQWJzdHJhY3RHcmFwaGljc0Rldmlj
ZSBnZXRPckNyZWF0ZVNoYXJlZERldmljZUltcGwoQWJzdHJhY3RHcmFwaGljc0RldmljZSBkZXZp
Y2UpIHsKICAgIFNoYXJlZFJlc291cmNlUnVubmVyLlJlc291cmNlIHNyID0gc2hhcmVkUmVzb3Vy
Y2VSdW5uZXIuZ2V0T3JDcmVhdGVTaGFyZWQoZGV2aWNlKTsKICAgIGlmKG51bGwhPXNyKSB7CiAg
ICAgICAgcmV0dXJuIHNyLmdldERldmljZSgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoK
ICBwcm90ZWN0ZWQgZmluYWwgbG9uZyBnZXRPckNyZWF0ZVNoYXJlZERweShBYnN0cmFjdEdyYXBo
aWNzRGV2aWNlIGRldmljZSkgewogICAgU2hhcmVkUmVzb3VyY2VSdW5uZXIuUmVzb3VyY2Ugc3Ig
PSBzaGFyZWRSZXNvdXJjZVJ1bm5lci5nZXRPckNyZWF0ZVNoYXJlZChkZXZpY2UpOwogICAgaWYo
bnVsbCE9c3IpIHsKICAgICAgICByZXR1cm4gc3IuZ2V0RGV2aWNlKCkuZ2V0SGFuZGxlKCk7CiAg
ICB9CiAgICByZXR1cm4gMDsKICB9CgogIFNoYXJlZFJlc291cmNlIGdldE9yQ3JlYXRlU2hhcmVk
UmVzb3VyY2UoQWJzdHJhY3RHcmFwaGljc0RldmljZSBkZXZpY2UpIHsKICAgIHJldHVybiAoU2hh
cmVkUmVzb3VyY2UpIHNoYXJlZFJlc291cmNlUnVubmVyLmdldE9yQ3JlYXRlU2hhcmVkKGRldmlj
ZSk7CiAgfQoKICBAT3ZlcnJpZGUKICBwcm90ZWN0ZWQgTGlzdDxHTENhcGFiaWxpdGllc0ltbXV0
YWJsZT4gZ2V0QXZhaWxhYmxlQ2FwYWJpbGl0aWVzSW1wbChBYnN0cmFjdEdyYXBoaWNzRGV2aWNl
IGRldmljZSkgewogICAgcmV0dXJuIFgxMUdMWEdyYXBoaWNzQ29uZmlndXJhdGlvbkZhY3Rvcnku
Z2V0QXZhaWxhYmxlQ2FwYWJpbGl0aWVzKHRoaXMsIGRldmljZSk7CiAgfQoKICBAT3ZlcnJpZGUK
ICBwcm90ZWN0ZWQgZmluYWwgR0xEcmF3YWJsZUltcGwgY3JlYXRlT25zY3JlZW5EcmF3YWJsZUlt
cGwoTmF0aXZlU3VyZmFjZSB0YXJnZXQpIHsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAg
ICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJOdWxsIHRhcmdldCIpOwogICAg
fQogICAgcmV0dXJuIG5ldyBYMTFPbnNjcmVlbkdMWERyYXdhYmxlKHRoaXMsIHRhcmdldCwgZmFs
c2UpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHJvdGVjdGVkIGZpbmFsIEdMRHJhd2FibGVJbXBsIGNy
ZWF0ZU9mZnNjcmVlbkRyYXdhYmxlSW1wbChOYXRpdmVTdXJmYWNlIHRhcmdldCkgewogICAgaWYg
KHRhcmdldCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRp
b24oIk51bGwgdGFyZ2V0Iik7CiAgICB9CiAgICBBYnN0cmFjdEdyYXBoaWNzQ29uZmlndXJhdGlv
biBjb25maWcgPSB0YXJnZXQuZ2V0R3JhcGhpY3NDb25maWd1cmF0aW9uKCk7CiAgICBHTENhcGFi
aWxpdGllc0ltbXV0YWJsZSBjYXBzID0gKEdMQ2FwYWJpbGl0aWVzSW1tdXRhYmxlKSBjb25maWcu
Z2V0Q2hvc2VuQ2FwYWJpbGl0aWVzKCk7CiAgICBpZighY2Fwcy5pc1BCdWZmZXIoKSkgewogICAg
ICAgIHJldHVybiBuZXcgWDExUGl4bWFwR0xYRHJhd2FibGUodGhpcywgdGFyZ2V0KTsKICAgIH0K
CiAgICAvLyBQQnVmZmVyIEdMRHJhd2FibGUgQ3JlYXRpb24KICAgIEdMRHJhd2FibGVJbXBsIHBi
dWZmZXJEcmF3YWJsZTsKICAgIEFic3RyYWN0R3JhcGhpY3NEZXZpY2UgZGV2aWNlID0gY29uZmln
LmdldFNjcmVlbigpLmdldERldmljZSgpOwoKICAgIC8qKgogICAgICogRHVlIHRvIHRoZSBBVEkg
QnVnIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NjI3NywK
ICAgICAqIHdlIG5lZWQgdG8gaGF2ZSBhIGNvbnRleHQgY3VycmVudCBvbiB0aGUgc2FtZSBEaXNw
bGF5IHRvIGNyZWF0ZSBhIFBCdWZmZXIuCiAgICAgKiBUaGUgZHVtbXkgY29udGV4dCBzaGFsbCBh
bHNvIHVzZSB0aGUgc2FtZSBEaXNwbGF5LAogICAgICogc2luY2Ugc3dpdGNoaW5nIERpc3BsYXkg
aW4gdGhpcyByZWdhcmQgaXMgYW5vdGhlciBBVEkgYnVnLgogICAgICovCiAgICBTaGFyZWRSZXNv
dXJjZSBzciA9IChTaGFyZWRSZXNvdXJjZSkgc2hhcmVkUmVzb3VyY2VSdW5uZXIuZ2V0T3JDcmVh
dGVTaGFyZWQoZGV2aWNlKTsKICAgIGlmKCBudWxsIT1zciAmJiBzci5pc0dMWFZlbmRvckFUSSgp
ICYmIG51bGwgPT0gR0xDb250ZXh0LmdldEN1cnJlbnQoKSApIHsKICAgICAgICBzci5nZXRDb250
ZXh0KCkubWFrZUN1cnJlbnQoKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBwYnVmZmVyRHJh
d2FibGUgPSBuZXcgWDExUGJ1ZmZlckdMWERyYXdhYmxlKHRoaXMsIHRhcmdldCk7CiAgICAgICAg
fSBmaW5hbGx5IHsKICAgICAgICAgICAgc3IuZ2V0Q29udGV4dCgpLnJlbGVhc2UoKTsKICAgICAg
ICB9CiAgICB9IGVsc2UgewogICAgICAgIHBidWZmZXJEcmF3YWJsZSA9IG5ldyBYMTFQYnVmZmVy
R0xYRHJhd2FibGUodGhpcywgdGFyZ2V0KTsKICAgIH0KICAgIHJldHVybiBwYnVmZmVyRHJhd2Fi
bGU7CiAgfQoKICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0dMWE11bHRpc2FtcGxlQXZhaWxhYmxl
KEFic3RyYWN0R3JhcGhpY3NEZXZpY2UgZGV2aWNlKSB7CiAgICBpZihudWxsICE9IGRldmljZSkg
ewogICAgICAgIFNoYXJlZFJlc291cmNlIHNyID0gKFNoYXJlZFJlc291cmNlKSBzaGFyZWRSZXNv
dXJjZVJ1bm5lci5nZXRPckNyZWF0ZVNoYXJlZChkZXZpY2UpOwogICAgICAgIGlmKG51bGwhPXNy
KSB7CiAgICAgICAgICByZXR1cm4gc3IuaXNHTFhNdWx0aXNhbXBsZUF2YWlsYWJsZSgpOwogICAg
ICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHB1YmxpYyBmaW5hbCBWZXJzaW9u
TnVtYmVyIGdldEdMWFZlcnNpb25OdW1iZXIoQWJzdHJhY3RHcmFwaGljc0RldmljZSBkZXZpY2Up
IHsKICAgIGlmKG51bGwgIT0gZGV2aWNlKSB7CiAgICAgICAgU2hhcmVkUmVzb3VyY2Ugc3IgPSAo
U2hhcmVkUmVzb3VyY2UpIHNoYXJlZFJlc291cmNlUnVubmVyLmdldE9yQ3JlYXRlU2hhcmVkKGRl
dmljZSk7CiAgICAgICAgaWYobnVsbCE9c3IpIHsKICAgICAgICAgIHJldHVybiBzci5nZXRHTFhW
ZXJzaW9uKCk7CiAgICAgICAgfQogICAgICAgIGlmKCBkZXZpY2UgaW5zdGFuY2VvZiBYMTFHcmFw
aGljc0RldmljZSApIHsKICAgICAgICAgIHJldHVybiBHTFhVdGlsLmdldEdMWFNlcnZlclZlcnNp
b25OdW1iZXIoZGV2aWNlLmdldEhhbmRsZSgpKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4g
bnVsbDsKICB9CgogIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzR0xYVmVyc2lvbkdyZWF0ZXJFcXVh
bE9uZU9uZShBYnN0cmFjdEdyYXBoaWNzRGV2aWNlIGRldmljZSkgewogICAgaWYobnVsbCAhPSBk
ZXZpY2UpIHsKICAgICAgICBTaGFyZWRSZXNvdXJjZSBzciA9IChTaGFyZWRSZXNvdXJjZSkgc2hh
cmVkUmVzb3VyY2VSdW5uZXIuZ2V0T3JDcmVhdGVTaGFyZWQoZGV2aWNlKTsKICAgICAgICBpZihu
dWxsIT1zcikgewogICAgICAgICAgcmV0dXJuIHNyLmlzR0xYVmVyc2lvbkdyZWF0ZXJFcXVhbE9u
ZU9uZSgpOwogICAgICAgIH0KICAgICAgICBpZiggZGV2aWNlIGluc3RhbmNlb2YgWDExR3JhcGhp
Y3NEZXZpY2UgKSB7CiAgICAgICAgICBmaW5hbCBWZXJzaW9uTnVtYmVyIGdsWFNlcnZlclZlcnNp
b24gPSBHTFhVdGlsLmdldEdMWFNlcnZlclZlcnNpb25OdW1iZXIoZGV2aWNlLmdldEhhbmRsZSgp
KTsKICAgICAgICAgIHJldHVybiBnbFhTZXJ2ZXJWZXJzaW9uLmNvbXBhcmVUbyh2ZXJzaW9uT25l
T25lKSA+PSAwOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHB1Ymxp
YyBmaW5hbCBib29sZWFuIGlzR0xYVmVyc2lvbkdyZWF0ZXJFcXVhbE9uZVRocmVlKEFic3RyYWN0
R3JhcGhpY3NEZXZpY2UgZGV2aWNlKSB7CiAgICBpZihudWxsICE9IGRldmljZSkgewogICAgICAg
IFNoYXJlZFJlc291cmNlIHNyID0gKFNoYXJlZFJlc291cmNlKSBzaGFyZWRSZXNvdXJjZVJ1bm5l
ci5nZXRPckNyZWF0ZVNoYXJlZChkZXZpY2UpOwogICAgICAgIGlmKG51bGwhPXNyKSB7CiAgICAg
ICAgICByZXR1cm4gc3IuaXNHTFhWZXJzaW9uR3JlYXRlckVxdWFsT25lVGhyZWUoKTsKICAgICAg
ICB9CiAgICAgICAgaWYoIGRldmljZSBpbnN0YW5jZW9mIFgxMUdyYXBoaWNzRGV2aWNlICkgewog
ICAgICAgICAgZmluYWwgVmVyc2lvbk51bWJlciBnbFhTZXJ2ZXJWZXJzaW9uID0gR0xYVXRpbC5n
ZXRHTFhTZXJ2ZXJWZXJzaW9uTnVtYmVyKGRldmljZS5nZXRIYW5kbGUoKSk7CiAgICAgICAgICBy
ZXR1cm4gZ2xYU2VydmVyVmVyc2lvbi5jb21wYXJlVG8odmVyc2lvbk9uZVRocmVlKSA+PSAwOwog
ICAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBPdmVycmlkZQogIHB1Ymxp
YyBmaW5hbCBib29sZWFuIGNhbkNyZWF0ZUdMUGJ1ZmZlcihBYnN0cmFjdEdyYXBoaWNzRGV2aWNl
IGRldmljZSkgewogICAgICBpZihudWxsID09IGRldmljZSkgewogICAgICAgIFNoYXJlZFJlc291
cmNlUnVubmVyLlJlc291cmNlIHNyID0gc2hhcmVkUmVzb3VyY2VSdW5uZXIuZ2V0T3JDcmVhdGVT
aGFyZWQoZGVmYXVsdERldmljZSk7CiAgICAgICAgaWYobnVsbCE9c3IpIHsKICAgICAgICAgICAg
ZGV2aWNlID0gc3IuZ2V0RGV2aWNlKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBp
c0dMWFZlcnNpb25HcmVhdGVyRXF1YWxPbmVUaHJlZShkZXZpY2UpOwogIH0KCiAgQE92ZXJyaWRl
CiAgcHJvdGVjdGVkIGZpbmFsIFByb3h5U3VyZmFjZSBjcmVhdGVNdXRhYmxlU3VyZmFjZUltcGwo
QWJzdHJhY3RHcmFwaGljc0RldmljZSBkZXZpY2VSZXEsIGJvb2xlYW4gY3JlYXRlTmV3RGV2aWNl
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTENhcGFiaWxpdGllc0ltbXV0YWJsZSBjYXBzQ2hvc2VuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMQ2FwYWJpbGl0aWVzSW1tdXRh
YmxlIGNhcHNSZXF1ZXN0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xDYXBhYmlsaXRpZXNDaG9vc2VyIGNob29zZXIsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgVXBzdHJlYW1TdXJmYWNlSG9vayBsaWZlY3ljbGVIb29rKSB7CiAgICBm
aW5hbCBYMTFHcmFwaGljc0RldmljZSBkZXZpY2U7CiAgICBpZihjcmVhdGVOZXdEZXZpY2UpIHsK
ICAgICAgICAvLyBOdWxsIFgxMSBsb2NraW5nLCBkdWUgdG8gcHJpdmF0ZSBub24tc2hhcmVkIERp
c3BsYXkgaGFuZGxlCiAgICAgICAgZGV2aWNlID0gbmV3IFgxMUdyYXBoaWNzRGV2aWNlKFgxMVV0
aWwub3BlbkRpc3BsYXkoZGV2aWNlUmVxLmdldENvbm5lY3Rpb24oKSksIGRldmljZVJlcS5nZXRV
bml0SUQoKSwgTmF0aXZlV2luZG93RmFjdG9yeS5nZXROdWxsVG9vbGtpdExvY2soKSwgdHJ1ZSk7
CiAgICB9IGVsc2UgewogICAgICAgIGRldmljZSA9IChYMTFHcmFwaGljc0RldmljZSlkZXZpY2VS
ZXE7CiAgICB9CiAgICBmaW5hbCBYMTFHcmFwaGljc1NjcmVlbiBzY3JlZW4gPSBuZXcgWDExR3Jh
cGhpY3NTY3JlZW4oZGV2aWNlLCBnZXRTY3JlZW5OdW1iZXJGcm9tKCBkZXZpY2UuZ2V0Q29ubmVj
dGlvbigpICkgKTsKICAgIGZpbmFsIFgxMUdMWEdyYXBoaWNzQ29uZmlndXJhdGlvbiBjb25maWcg
PSBYMTFHTFhHcmFwaGljc0NvbmZpZ3VyYXRpb25GYWN0b3J5LmNob29zZUdyYXBoaWNzQ29uZmln
dXJhdGlvblN0YXRpYyhjYXBzQ2hvc2VuLCBjYXBzUmVxdWVzdGVkLCBjaG9vc2VyLCBzY3JlZW4s
IFZpc3VhbElESG9sZGVyLlZJRF9VTkRFRklORUQpOwogICAgaWYobnVsbCA9PSBjb25maWcpIHsK
ICAgICAgICB0aHJvdyBuZXcgR0xFeGNlcHRpb24oIkNob29zaW5nIEdyYXBoaWNzQ29uZmlndXJh
dGlvbiBmYWlsZWQgdy8gIitjYXBzQ2hvc2VuKyIgb24gIitzY3JlZW4pOyAKICAgIH0KICAgIHJl
dHVybiBuZXcgV3JhcHBlZFN1cmZhY2UoIGNvbmZpZywgMCwgd2lkdGgsIGhlaWdodCwgbGlmZWN5
Y2xlSG9vayk7CiAgfQoKICBAT3ZlcnJpZGUKICBwdWJsaWMgZmluYWwgUHJveHlTdXJmYWNlIGNy
ZWF0ZUR1bW15U3VyZmFjZUltcGwoQWJzdHJhY3RHcmFwaGljc0RldmljZSBkZXZpY2VSZXEsIGJv
b2xlYW4gY3JlYXRlTmV3RGV2aWNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xDYXBhYmlsaXRpZXNJbW11dGFibGUgcmVxdWVzdGVkQ2Fwcywg
R0xDYXBhYmlsaXRpZXNDaG9vc2VyIGNob29zZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewog
ICAgZmluYWwgR0xDYXBhYmlsaXRpZXNJbW11dGFibGUgY2hvc2VuQ2FwcyA9IEdMR3JhcGhpY3ND
b25maWd1cmF0aW9uVXRpbC5maXhPbnNjcmVlbkdMQ2FwYWJpbGl0aWVzKHJlcXVlc3RlZENhcHMp
OwogICAgcmV0dXJuIGNyZWF0ZU11dGFibGVTdXJmYWNlSW1wbChkZXZpY2VSZXEsIGNyZWF0ZU5l
d0RldmljZSwgY2hvc2VuQ2FwcywgcmVxdWVzdGVkQ2FwcywgY2hvb3Nlciwgd2lkdGgsIGhlaWdo
dCwgZHVtbXlTdXJmYWNlTGlmZWN5Y2xlSG9vayk7IAogIH0gIAogIHByaXZhdGUgc3RhdGljIGZp
bmFsIFByb3h5U3VyZmFjZS5VcHN0cmVhbVN1cmZhY2VIb29rIGR1bW15U3VyZmFjZUxpZmVjeWNs
ZUhvb2sgPSBuZXcgUHJveHlTdXJmYWNlLlVwc3RyZWFtU3VyZmFjZUhvb2soKSB7CiAgICBAT3Zl
cnJpZGUKICAgIHB1YmxpYyBmaW5hbCB2b2lkIGNyZWF0ZShQcm94eVN1cmZhY2UgcykgewogICAg
ICAgIGlmKCAwID09IHMuZ2V0U3VyZmFjZUhhbmRsZSgpICkgewogICAgICAgICAgICBmaW5hbCBY
MTFHTFhHcmFwaGljc0NvbmZpZ3VyYXRpb24gY2ZnID0gKFgxMUdMWEdyYXBoaWNzQ29uZmlndXJh
dGlvbikgcy5nZXRHcmFwaGljc0NvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgICAgZmluYWwgWDEx
R3JhcGhpY3NTY3JlZW4gc2NyZWVuID0gKFgxMUdyYXBoaWNzU2NyZWVuKSBjZmcuZ2V0U2NyZWVu
KCk7CiAgICAgICAgICAgIGZpbmFsIFgxMUdyYXBoaWNzRGV2aWNlIGRldmljZSA9IChYMTFHcmFw
aGljc0RldmljZSkgc2NyZWVuLmdldERldmljZSgpOwogICAgICAgICAgICBpZigwID09IGRldmlj
ZS5nZXRIYW5kbGUoKSkgewogICAgICAgICAgICAgICAgZGV2aWNlLm9wZW4oKTsKICAgICAgICAg
ICAgICAgIHMuc2V0SW1wbEJpdGZpZWxkKFByb3h5U3VyZmFjZS5PV05fREVWSUNFKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgICBmaW5hbCBsb25nIHdpbmRvd0hhbmRsZSA9IFgxMUxpYi5DcmVh
dGVEdW1teVdpbmRvdyhkZXZpY2UuZ2V0SGFuZGxlKCksIHNjcmVlbi5nZXRJbmRleCgpLCBjZmcu
Z2V0WFZpc3VhbElEKCksIHMuZ2V0V2lkdGgoKSwgcy5nZXRIZWlnaHQoKSk7CiAgICAgICAgICAg
IGlmKDAgPT0gd2luZG93SGFuZGxlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR0xFeGNl
cHRpb24oIkNyZWF0aW5nIGR1bW15IHdpbmRvdyBmYWlsZWQgdy8gIitjZmcrIiwgIitzLmdldFdp
ZHRoKCkrIngiK3MuZ2V0SGVpZ2h0KCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHMuc2V0
U3VyZmFjZUhhbmRsZSh3aW5kb3dIYW5kbGUpOwogICAgICAgICAgICBpZihERUJVRykgewogICAg
ICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJYMTFHTFhEcmF3YWJsZUZhY3RvcnkuZHVt
bXlTdXJmYWNlTGlmZWN5Y2xlSG9vay5jcmVhdGU6ICIrcyk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICB9CiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBmaW5hbCB2b2lkIGRlc3Ryb3koUHJv
eHlTdXJmYWNlIHMpIHsKICAgICAgICBpZigwICE9IHMuZ2V0U3VyZmFjZUhhbmRsZSgpKSB7CiAg
ICAgICAgICAgIGZpbmFsIFgxMUdMWEdyYXBoaWNzQ29uZmlndXJhdGlvbiBjb25maWcgPSAoWDEx
R0xYR3JhcGhpY3NDb25maWd1cmF0aW9uKSBzLmdldEdyYXBoaWNzQ29uZmlndXJhdGlvbigpOwog
ICAgICAgICAgICBmaW5hbCBYMTFHcmFwaGljc0RldmljZSBkZXZpY2UgPSAoWDExR3JhcGhpY3NE
ZXZpY2UpIGNvbmZpZy5nZXRTY3JlZW4oKS5nZXREZXZpY2UoKTsKICAgICAgICAgICAgWDExTGli
LkRlc3Ryb3lEdW1teVdpbmRvdyhkZXZpY2UuZ2V0SGFuZGxlKCksIHMuZ2V0U3VyZmFjZUhhbmRs
ZSgpKTsgICAgICAgICAgICAKICAgICAgICAgICAgcy5zZXRTdXJmYWNlSGFuZGxlKDApOwogICAg
ICAgICAgICBpZiggMCAhPSAoIFByb3h5U3VyZmFjZS5PV05fREVWSUNFICYgcy5nZXRJbXBsQml0
ZmllbGQoKSApICkgewogICAgICAgICAgICAgICAgZGV2aWNlLmNsb3NlKCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJp
bnRsbigiWDExR0xYRHJhd2FibGVGYWN0b3J5LmR1bW15U3VyZmFjZUxpZmVjeWNsZUhvb2suZGVz
dHJveTogIitzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIEBPdmVycmlkZQog
ICAgcHVibGljIGZpbmFsIGludCBnZXRXaWR0aChQcm94eVN1cmZhY2UgcykgewogICAgICAgIHJl
dHVybiBzLmluaXRpYWxXaWR0aDsKICAgIH0KICAgIEBPdmVycmlkZQogICAgcHVibGljIGZpbmFs
IGludCBnZXRIZWlnaHQoUHJveHlTdXJmYWNlIHMpIHsKICAgICAgICByZXR1cm4gcy5pbml0aWFs
SGVpZ2h0OwogICAgfQogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkg
ewogICAgICAgcmV0dXJuICJYMTFTdXJmYWNlTGlmZWN5Y2xlSG9va1tdIjsKICAgIH0KICB9Owog
IAogIAogIEBPdmVycmlkZQogIHByb3RlY3RlZCBmaW5hbCBQcm94eVN1cmZhY2UgY3JlYXRlUHJv
eHlTdXJmYWNlSW1wbChBYnN0cmFjdEdyYXBoaWNzRGV2aWNlIGRldmljZVJlcSwgaW50IHNjcmVl
bklkeCwgbG9uZyB3aW5kb3dIYW5kbGUsIEdMQ2FwYWJpbGl0aWVzSW1tdXRhYmxlIGNhcHNSZXF1
ZXN0ZWQsIEdMQ2FwYWJpbGl0aWVzQ2hvb3NlciBjaG9vc2VyLCBVcHN0cmVhbVN1cmZhY2VIb29r
IHVwc3RyZWFtKSB7CiAgICBmaW5hbCBYMTFHcmFwaGljc0RldmljZSBkZXZpY2UgPSBuZXcgWDEx
R3JhcGhpY3NEZXZpY2UoWDExVXRpbC5vcGVuRGlzcGxheShkZXZpY2VSZXEuZ2V0Q29ubmVjdGlv
bigpKSwgZGV2aWNlUmVxLmdldFVuaXRJRCgpLCBOYXRpdmVXaW5kb3dGYWN0b3J5LmdldE51bGxU
b29sa2l0TG9jaygpLCB0cnVlKTsKICAgIGZpbmFsIFgxMUdyYXBoaWNzU2NyZWVuIHNjcmVlbiA9
IG5ldyBYMTFHcmFwaGljc1NjcmVlbihkZXZpY2UsIHNjcmVlbklkeCk7CiAgICBmaW5hbCBpbnQg
eHZpc3VhbElEID0gWDExTGliLkdldFZpc3VhbElERnJvbVdpbmRvdyhkZXZpY2UuZ2V0SGFuZGxl
KCksIHdpbmRvd0hhbmRsZSk7CiAgICBpZihWaXN1YWxJREhvbGRlci5WSURfVU5ERUZJTkVEID09
IHh2aXN1YWxJRCkgewogICAgICAgIHRocm93IG5ldyBHTEV4Y2VwdGlvbigiVW5kZWZpbmVkIFZp
c3VhbElEIG9mIHdpbmRvdyAweCIrTG9uZy50b0hleFN0cmluZyh3aW5kb3dIYW5kbGUpKyIsIHdp
bmRvdyBwcm9iYWJseSBpbnZhbGlkIik7CiAgICB9CiAgICBpZihERUJVRykgewogICAgICAgIFN5
c3RlbS5lcnIucHJpbnRsbigiWDExR0xYRHJhd2FibGVGYWN0b3J5LmNyZWF0ZVByb3h5U3VyZmFj
ZUltcGwgMHgiK0xvbmcudG9IZXhTdHJpbmcod2luZG93SGFuZGxlKSsiOiB2aXN1YWxJRCAweCIr
SW50ZWdlci50b0hleFN0cmluZyh4dmlzdWFsSUQpKTsKICAgIH0KICAgIGZpbmFsIFgxMUdMWEdy
YXBoaWNzQ29uZmlndXJhdGlvbiBjZmcgPSBYMTFHTFhHcmFwaGljc0NvbmZpZ3VyYXRpb25GYWN0
b3J5LmNob29zZUdyYXBoaWNzQ29uZmlndXJhdGlvblN0YXRpYyhjYXBzUmVxdWVzdGVkLCBjYXBz
UmVxdWVzdGVkLCBjaG9vc2VyLCBzY3JlZW4sIHh2aXN1YWxJRCk7CiAgICBpZihERUJVRykgewog
ICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiWDExR0xYRHJhd2FibGVGYWN0b3J5LmNyZWF0ZVBy
b3h5U3VyZmFjZUltcGwgMHgiK0xvbmcudG9IZXhTdHJpbmcod2luZG93SGFuZGxlKSsiOiAiK2Nm
Zyk7CiAgICB9CiAgICByZXR1cm4gbmV3IFdyYXBwZWRTdXJmYWNlKGNmZywgd2luZG93SGFuZGxl
LCAwLCAwLCB1cHN0cmVhbSk7CiAgfQoKICBAT3ZlcnJpZGUKICBwcm90ZWN0ZWQgZmluYWwgR0xD
b250ZXh0IGNyZWF0ZUV4dGVybmFsR0xDb250ZXh0SW1wbCgpIHsKICAgIHJldHVybiBYMTFFeHRl
cm5hbEdMWENvbnRleHQuY3JlYXRlKHRoaXMsIG51bGwpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVi
bGljIGZpbmFsIGJvb2xlYW4gY2FuQ3JlYXRlRXh0ZXJuYWxHTERyYXdhYmxlKEFic3RyYWN0R3Jh
cGhpY3NEZXZpY2UgZGV2aWNlKSB7CiAgICByZXR1cm4gY2FuQ3JlYXRlR0xQYnVmZmVyKGRldmlj
ZSk7CiAgfQoKICBAT3ZlcnJpZGUKICBwcm90ZWN0ZWQgZmluYWwgR0xEcmF3YWJsZSBjcmVhdGVF
eHRlcm5hbEdMRHJhd2FibGVJbXBsKCkgewogICAgcmV0dXJuIFgxMUV4dGVybmFsR0xYRHJhd2Fi
bGUuY3JlYXRlKHRoaXMsIG51bGwpOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGljIGZpbmFsIGJv
b2xlYW4gY2FuQ3JlYXRlQ29udGV4dE9uSmF2YTJEU3VyZmFjZShBYnN0cmFjdEdyYXBoaWNzRGV2
aWNlIGRldmljZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQE92ZXJyaWRlCiAgcHVibGlj
IGZpbmFsIEdMQ29udGV4dCBjcmVhdGVDb250ZXh0T25KYXZhMkRTdXJmYWNlKE9iamVjdCBncmFw
aGljcywgR0xDb250ZXh0IHNoYXJlV2l0aCkKICAgIHRocm93cyBHTEV4Y2VwdGlvbiB7CiAgICB0
aHJvdyBuZXcgR0xFeGNlcHRpb24oIlVuaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOwog
IH0KCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gR2FtbWEtcmVsYXRlZCBmdW5jdGlvbmFsaXR5CiAg
Ly8KCiAgcHJpdmF0ZSBib29sZWFuIGdvdEdhbW1hUmFtcExlbmd0aDsKICBwcml2YXRlIGludCBn
YW1tYVJhbXBMZW5ndGg7CiAgQE92ZXJyaWRlCiAgcHJvdGVjdGVkIGZpbmFsIHN5bmNocm9uaXpl
ZCBpbnQgZ2V0R2FtbWFSYW1wTGVuZ3RoKCkgewogICAgaWYgKGdvdEdhbW1hUmFtcExlbmd0aCkg
ewogICAgICByZXR1cm4gZ2FtbWFSYW1wTGVuZ3RoOwogICAgfQoKICAgIGxvbmcgZGlzcGxheSA9
IGdldE9yQ3JlYXRlU2hhcmVkRHB5KGRlZmF1bHREZXZpY2UpOwogICAgaWYoMCA9PSBkaXNwbGF5
KSB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgaW50W10gc2l6ZSA9IG5ldyBpbnRbMV07
CiAgICBib29sZWFuIHJlcyA9IFgxMUxpYi5YRjg2VmlkTW9kZUdldEdhbW1hUmFtcFNpemUoZGlz
cGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWDExTGliLkRlZmF1bHRTY3JlZW4oZGlzcGxheSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsIDApOwogICAgaWYgKCFyZXMpIHsK
ICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBnb3RHYW1tYVJhbXBMZW5ndGggPSB0cnVlOwogICAg
Z2FtbWFSYW1wTGVuZ3RoID0gc2l6ZVswXTsKICAgIHJldHVybiBnYW1tYVJhbXBMZW5ndGg7CiAg
fQoKICBAT3ZlcnJpZGUKICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBzZXRHYW1tYVJhbXAoZmxv
YXRbXSByYW1wKSB7CiAgICBsb25nIGRpc3BsYXkgPSBnZXRPckNyZWF0ZVNoYXJlZERweShkZWZh
dWx0RGV2aWNlKTsKICAgIGlmKDAgPT0gZGlzcGxheSkgewogICAgICAgIHJldHVybiBmYWxzZTsK
ICAgIH0KCiAgICBpbnQgbGVuID0gcmFtcC5sZW5ndGg7CiAgICBzaG9ydFtdIHJhbXBEYXRhID0g
bmV3IHNob3J0W2xlbl07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAg
IHJhbXBEYXRhW2ldID0gKHNob3J0KSAocmFtcFtpXSAqIDY1NTM1KTsKICAgIH0KCiAgICBib29s
ZWFuIHJlcyA9IFgxMUxpYi5YRjg2VmlkTW9kZVNldEdhbW1hUmFtcChkaXNwbGF5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExTGliLkRlZmF1bHRTY3Jl
ZW4oZGlzcGxheSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByYW1wRGF0YS5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByYW1wRGF0YSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJhbXBEYXRhLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmFtcERhdGEsIDApOwogICAgcmV0dXJuIHJlczsKICB9CgogIEBPdmVycmlk
ZQogIHByb3RlY3RlZCBmaW5hbCBCdWZmZXIgZ2V0R2FtbWFSYW1wKCkgewogICAgbG9uZyBkaXNw
bGF5ID0gZ2V0T3JDcmVhdGVTaGFyZWREcHkoZGVmYXVsdERldmljZSk7CiAgICBpZigwID09IGRp
c3BsYXkpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpbnQgc2l6ZSA9IGdldEdh
bW1hUmFtcExlbmd0aCgpOwogICAgU2hvcnRCdWZmZXIgcmFtcERhdGEgPSBTaG9ydEJ1ZmZlci53
cmFwKG5ldyBzaG9ydFszICogc2l6ZV0pOwogICAgcmFtcERhdGEucG9zaXRpb24oMCk7CiAgICBy
YW1wRGF0YS5saW1pdChzaXplKTsKICAgIFNob3J0QnVmZmVyIHJlZFJhbXBEYXRhID0gcmFtcERh
dGEuc2xpY2UoKTsKICAgIHJhbXBEYXRhLnBvc2l0aW9uKHNpemUpOwogICAgcmFtcERhdGEubGlt
aXQoMiAqIHNpemUpOwogICAgU2hvcnRCdWZmZXIgZ3JlZW5SYW1wRGF0YSA9IHJhbXBEYXRhLnNs
aWNlKCk7CiAgICByYW1wRGF0YS5wb3NpdGlvbigyICogc2l6ZSk7CiAgICByYW1wRGF0YS5saW1p
dCgzICogc2l6ZSk7CiAgICBTaG9ydEJ1ZmZlciBibHVlUmFtcERhdGEgPSByYW1wRGF0YS5zbGlj
ZSgpOwoKICAgIGJvb2xlYW4gcmVzID0gWDExTGliLlhGODZWaWRNb2RlR2V0R2FtbWFSYW1wKGRp
c3BsYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYMTFM
aWIuRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWRSYW1wRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdyZWVuUmFtcERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBibHVlUmFtcERhdGEpOwogICAgaWYgKCFyZXMpIHsKICAgICAgcmV0
dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gcmFtcERhdGE7CiAgfQoKICBAT3ZlcnJpZGUKICBw
cm90ZWN0ZWQgZmluYWwgdm9pZCByZXNldEdhbW1hUmFtcChCdWZmZXIgb3JpZ2luYWxHYW1tYVJh
bXApIHsKICAgIGlmIChvcmlnaW5hbEdhbW1hUmFtcCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJu
OyAvLyBnZXRHYW1tYVJhbXAgZmFpbGVkIG9yaWdpbmFsbHkKICAgIH0KICAgIGxvbmcgZGlzcGxh
eSA9IGdldE9yQ3JlYXRlU2hhcmVkRHB5KGRlZmF1bHREZXZpY2UpOwogICAgaWYoMCA9PSBkaXNw
bGF5KSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFNob3J0QnVmZmVyIHJhbXBEYXRhID0g
KFNob3J0QnVmZmVyKSBvcmlnaW5hbEdhbW1hUmFtcDsKICAgIGludCBjYXBhY2l0eSA9IHJhbXBE
YXRhLmNhcGFjaXR5KCk7CiAgICBpZiAoKGNhcGFjaXR5ICUgMykgIT0gMCkgewogICAgICB0aHJv
dyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNdXN0IG5vdCBiZSB0aGUgb3JpZ2luYWwg
Z2FtbWEgcmFtcCIpOwogICAgfQogICAgaW50IHNpemUgPSBjYXBhY2l0eSAvIDM7CiAgICByYW1w
RGF0YS5wb3NpdGlvbigwKTsKICAgIHJhbXBEYXRhLmxpbWl0KHNpemUpOwogICAgU2hvcnRCdWZm
ZXIgcmVkUmFtcERhdGEgPSByYW1wRGF0YS5zbGljZSgpOwogICAgcmFtcERhdGEucG9zaXRpb24o
c2l6ZSk7CiAgICByYW1wRGF0YS5saW1pdCgyICogc2l6ZSk7CiAgICBTaG9ydEJ1ZmZlciBncmVl
blJhbXBEYXRhID0gcmFtcERhdGEuc2xpY2UoKTsKICAgIHJhbXBEYXRhLnBvc2l0aW9uKDIgKiBz
aXplKTsKICAgIHJhbXBEYXRhLmxpbWl0KDMgKiBzaXplKTsKICAgIFNob3J0QnVmZmVyIGJsdWVS
YW1wRGF0YSA9IHJhbXBEYXRhLnNsaWNlKCk7CgogICAgWDExTGliLlhGODZWaWRNb2RlU2V0R2Ft
bWFSYW1wKGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDExTGliLkRl
ZmF1bHRTY3JlZW4oZGlzcGxheSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRSYW1wRGF0YSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBncmVlblJhbXBEYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJsdWVSYW1wRGF0YSk7CiAgfQp9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>