public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: java/5487: arm-linux-gcj cross-compiler generates bad assembler-code
@ 2002-03-23  9:47 rearnsha
  0 siblings, 0 replies; 7+ messages in thread
From: rearnsha @ 2002-03-23  9:47 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, java-prs, jsantala, nobody

Synopsis: arm-linux-gcj cross-compiler generates bad assembler-code

State-Changed-From-To: open->feedback
State-Changed-By: rearnsha
State-Changed-When: Sat Mar 23 09:47:17 2002
State-Changed-Why:
    OK, first-off I'm not a java programmer.  However, I've tried 
    running your test-case and I get a load of errors that suggest
    that the testcase is incomplete.  Please provide the missing
    information and/or instructions for how I can reproduce this
    in isolation.
    
    linux16:tmp [1093] $ ~/gnu/egcs/arm-elf/gcc/gcj -B ~/gnu/egcs/arm-elf/arm-el
    f/libjava/ -B ~/gnu/egcs/arm-elf/gcc/ -fCLASSPATH=./:/home/rearnsha/gnu/egcs/arm
    -elf/arm-elf/libjava/ -O2 -save-temps -dp -v --encoding=8859_1 -fassume-compiled
     -O2 -c DTDGrammar.java -MT lib_org_apache_xerces_la-DTDGrammar.lo -MD -MP -MF l
    ib_org_apache_xerces_la-DTDGrammar.TPlo  -fPIC  -o  lib_org_apache_xerces_la-DTD
    Grammar.lo
    Reading specs from /home/rearnsha/gnu/egcs/arm-elf/gcc/specs
    Reading specs from /home/rearnsha/gnu/egcs/arm-elf/arm-elf/libjava/libgcj.spec
    rename spec lib to liborig
    Configured with: /home/rearnsha/gnusrc/egcs-cross/configure --prefix=/home/rearn
    sha/gnu/egcs//arm-elf-install --disable-checking --target=arm-elf --with-headers
    =/home/rearnsha/gnusrc/egcs-cross/newlib/libc/include
    Thread model: single
    gcc version 3.2 20020322 (experimental)
     /home/rearnsha/gnu/egcs/arm-elf/gcc/jc1 DTDGrammar.java -fuse-divide-subroutine
     -fuse-boehm-gc -fnon-call-exceptions -fkeep-inline-functions -quiet -dumpbase D
    TDGrammar.java -dp -O2 -O2 -version -fCLASSPATH=./:/home/rearnsha/gnu/egcs/arm-e
    lf/arm-elf/libjava/ -fencoding=8859_1 -fassume-compiled -fPIC -MD -MT lib_org_ap
    ache_xerces_la-DTDGrammar.lo -MF lib_org_apache_xerces_la-DTDGrammar.TPlo -o DTD
    Grammar.s
    GNU Java version 3.2 20020322 (experimental) (arm-elf)
            compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.1 2.96-81).
    Class path starts here:
        ./
        /home/rearnsha/gnu/egcs/arm-elf/arm-elf/libjava/
        /home/rearnsha/gnu/egcs//arm-elf-install/share/libgcj.jar/ (system) (zip)
    DTDGrammar.java:70: Class or interface `org.apache.xerces.validators.schema.XUti
    l' not found in import.
       import org.apache.xerces.validators.schema.XUtil;
              ^
    DTDGrammar.java:91: Superclass `Grammar' of class `org.apache.xerces.validators.
    dtd.DTDGrammar' not found.
           extends Grammar 
                   ^
    DTDGrammar.java:92: Superinterface `XMLDTDScanner.EventHandler' of class `org.ap
    ache.xerces.validators.dtd.DTDGrammar' not found.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=5487


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: java/5487: arm-linux-gcj cross-compiler generates bad assembler-code
@ 2003-01-01 18:26 neroden
  0 siblings, 0 replies; 7+ messages in thread
From: neroden @ 2003-01-01 18:26 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, java-prs, jsantala, nobody

Synopsis: arm-linux-gcj cross-compiler generates bad assembler-code

State-Changed-From-To: feedback->closed
State-Changed-By: neroden
State-Changed-When: Wed Jan  1 10:26:38 2003
State-Changed-Why:
    Testcase hasn't been cut down to be usable; been in feedback for 9 months.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=5487


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: java/5487: arm-linux-gcj cross-compiler generates bad  assembler-code
@ 2002-03-26  5:46 Richard Earnshaw
  0 siblings, 0 replies; 7+ messages in thread
From: Richard Earnshaw @ 2002-03-26  5:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR java/5487; it has been noted by GNATS.

From: Richard Earnshaw <rearnsha@arm.com>
To: tromey@redhat.com
Cc: Richard.Earnshaw@arm.com, gcc-gnats@gcc.gnu.org
Subject: Re: java/5487: arm-linux-gcj cross-compiler generates bad 
 assembler-code
Date: Tue, 26 Mar 2002 13:41:34 +0000

 tromey@redhat.com said:
 > OTOH, rhug is sort of a special case.  It is one of the important gcj
 > applications that we want to build out of the box. 
 
 Except, of course, that it doesn't; particularly for a cross system.
 
 
 
 ~/gnusrc/rhug/configure --target=arm-elf --prefix=/home/rearnsha/gnu/egcs/a
 rm-elf-install
 
 ...
 checking for gcj... no
 checking for gcjh... no
 configure: error: no acceptable gcjh found in $PATH
 cam-linux16:rhug [1006] $ arm-elf-gc
 arm-elf-gcc     arm-elf-gcj     arm-elf-gcov    
 arm-elf-gccbug  arm-elf-gcjh    
 
 It should be looking for the cross compiler, not a native one in a cross 
 build.
 
 I'm sorry, I just don't have the time to spend tracking down this problem; 
 there's just too many prerequisites that are in the way.  If someone can 
 produce an isolated test-case, which doesn't require pre-installing a load 
 of other packages, then I'll look into it further.
 
 R.
 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: java/5487: arm-linux-gcj cross-compiler generates bad assembler-code
@ 2002-03-25 12:36 Tom Tromey
  0 siblings, 0 replies; 7+ messages in thread
From: Tom Tromey @ 2002-03-25 12:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR java/5487; it has been noted by GNATS.

From: Tom Tromey <tromey@redhat.com>
To: Richard.Earnshaw@arm.com
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: java/5487: arm-linux-gcj cross-compiler generates bad assembler-code
Date: 25 Mar 2002 14:04:48 -0700

 >>>>> "Richard" == Richard Earnshaw <rearnsha@arm.com> writes:
 
 Richard>   What we do not want
 Richard>   ...
 Richard>     The location (URL) of the package that failed to build (we won't
 Richard>     download it, anyway, since you've already given us what we need to
 Richard>     duplicate the bug, haven't you? :-) 
 
 Yeah.  Java is a little different from C or C++.  You can't send a
 `.i' file that encapsulates everything you need for the bug.  Still, I
 agree that downloading something is a pain and it is much, much more
 convenient to have a small archive that demonstrates the bug.
 
 OTOH, rhug is sort of a special case.  It is one of the important gcj
 applications that we want to build out of the box.
 
 Tom


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: java/5487: arm-linux-gcj cross-compiler generates bad assembler-code
@ 2002-03-25  3:46 Richard Earnshaw
  0 siblings, 0 replies; 7+ messages in thread
From: Richard Earnshaw @ 2002-03-25  3:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR java/5487; it has been noted by GNATS.

From: Richard Earnshaw <rearnsha@arm.com>
To: Tom Tromey <tromey@redhat.com>
Cc: nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org, Richard.Earnshaw@arm.com
Subject: Re: java/5487: arm-linux-gcj cross-compiler generates bad assembler-code 
Date: Mon, 25 Mar 2002 11:39:29 +0000

 tromey@redhat.com said:
 >  In the PR he says that the code comes from rhug.  You can find rhug
 >  here:
 >        http://sources.redhat.com/rhug/
 >    It's all available via anonymous cvs. 
 
 However, 
 
   http://gcc.gnu.org/bugs.html
 
 says:
 
   What we do not want
 
   ...
     The location (URL) of the package that failed to build (we won't
     download it, anyway, since you've already given us what we need to
     duplicate the bug, haven't you? :-) 
 
 
 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: java/5487: arm-linux-gcj cross-compiler generates bad assembler-code
@ 2002-03-23 19:36 Tom Tromey
  0 siblings, 0 replies; 7+ messages in thread
From: Tom Tromey @ 2002-03-23 19:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR java/5487; it has been noted by GNATS.

From: Tom Tromey <tromey@redhat.com>
To: rearnsha@gcc.gnu.org
Cc: gcc-bugs@gcc.gnu.org.jsantala@tml.hut.fi, gcc-gnats@gcc.gnu.org
Subject: Re: java/5487: arm-linux-gcj cross-compiler generates bad assembler-code
Date: 23 Mar 2002 21:05:55 -0700

 Richard> OK, first-off I'm not a java programmer.  However, I've tried
 Richard> running your test-case and I get a load of errors that
 Richard> suggest that the testcase is incomplete.  Please provide the
 Richard> missing information and/or instructions for how I can
 Richard> reproduce this in isolation.
 
 In the PR he says that the code comes from rhug.  You can find rhug
 here:
 
     http://sources.redhat.com/rhug/
 
 It's all available via anonymous cvs.
 
 I can build rhug fine on x86.  Last time I tried was a couple weeks
 ago.
 
 Tom


^ permalink raw reply	[flat|nested] 7+ messages in thread

* java/5487: arm-linux-gcj cross-compiler generates bad assembler-code
@ 2002-01-25  1:46 jsantala
  0 siblings, 0 replies; 7+ messages in thread
From: jsantala @ 2002-01-25  1:46 UTC (permalink / raw)
  To: gcc-gnats


>Number:         5487
>Category:       java
>Synopsis:       arm-linux-gcj cross-compiler generates bad assembler-code
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 25 01:46:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Jukka Santala
>Release:        3.1 20020122 (experimental)
>Organization:
>Environment:
Using Red Hat 7.1, with GCC compiled as arm-linux cross-compiler.
>Description:
Compiling specific Java file of the Red Hat GCJ/rhug tree:
arm-linux-gcj -fCLASSPATH=upstream/src:./upstream/src -O2 -save-temps -dp -v --encoding=8859_1 -fassume-compiled -O2 -c upstream/src/org/apache/xerces/validators/dtd/DTDGrammar.java -MT upstream/src/org/apache/xerces/validators/dtd/lib_org_apache_xerces_la-DTDGrammar.lo -MD -MP -MF upstream/src/org/apache/xerces/validators/dtd/.deps/lib_org_apache_xerces_la-DTDGrammar.TPlo  -fPIC  -o upstream/src/org/apache/xerces/validators/dtd/.libs/lib_org_apache_xerces_la-DTDGrammar.lo

Using arm-linux-gcc cross-compiler, GCJ generates object-files with undefined symbol references. For example:
/home/jsantala/rhug-clean/xerces/.libs/lib-org-apache-xerces.so: undefined reference to `.L153'
/home/jsantala/rhug-clean/xerces/.libs/lib-org-apache-xerces.so: undefined reference to `.L156'
nm output of affected source module:
         U .L153
         U .L156
000000d8 d _CD_org_apache_xerces_validators_dtd_DTDGrammar
...
>From assembler source:
...
.L164:
        bl      _Jv_ThrowBadArrayIndex(PLT)     @ 855   *call_value_symbol/1
[length = 4]
        .align  2
.L155:
        b       .L156
        b       .L156
        b       .L156
        b       .L156
        b       .L156
        b       .L156
        b       .L153
.L166:
        ldr     r3, .L169+20    @ 1003  pic_load_addr_arm       [length = 4]
...

If compiler is ran with -fverbose-asm, it crashes with segmentation fault ICE:
gcc version 3.1 20020122 (experimental)
 /skiff/local/lib/gcc-lib/arm-linux/3.1/jc1 upstream/src/org/apache/xerces/validators/dtd/DTDGrammar.java -fuse-divide-subroutine -fuse-boehm-gc -fnon-call-exceptions -fkeep-inline-functions -quiet -dumpbase DTDGrammar.java -dp -O2 -O2 -version -fCLASSPATH=upstream/src:./upstream/src -fverbose-asm -fencoding=8859_1 -fassume-compiled -fPIC -MD -MT upstream/src/org/apache/xerces/validators/dtd/lib_org_apache_xerces_la-DTDGrammar.lo -MF upstream/src/org/apache/xerces/validators/dtd/.deps/lib_org_apache_xerces_la-DTDGrammar.TPlo -o DTDGrammar.s
GNU Java version 3.1 20020122 (experimental) (arm-linux)
        compiled by GNU C version 3.0.3.
Class path starts here:
    upstream/src/
    ./upstream/src/
    ./
    /skiff/local/share/libgcj.jar/ (system) (zip)
upstream/src/org/apache/xerces/validators/dtd/DTDGrammar.java:174: internal error: Segmentation fault
(gdb) where
#0  get_mem_expr_from_op (op=0x0, paddressp=0xbfffef98)
    at ../../gcc/gcc/final.c:3016
#1  0x08127f09 in output_asm_operand_names (operands=0xbffff1b0,
    oporder=0xbffff050, nops=1) at ../../gcc/gcc/final.c:3061
#2  0x08128053 in output_asm_insn (
    template=0xbffff110 "ldm%?%d0fd\t%|sp!, {%|r4, %|r5, %|r6, %|r7, %|r8, %|r9, %|sl, %|pc}", operands=0xbffff1b0) at ../../gcc/gcc/final.c:3289
#3  0x0822130b in output_return_instruction (operand=0x0, really_return=1,
    reverse=0) at ../../gcc/gcc/config/arm/arm.c:7353
#4  0x0816eeed in output_259 (operands=0x83623c0, insn=0x4039a640)
    at insn-output.c:1325
#5  0x08126cc4 in get_insn_template (code=259, insn=0x4039a640)
    at ../../gcc/gcc/final.c:1809
#6  0x0812701c in final_scan_insn (insn=0x4039a640, file=0x8385d88,
    optimize=2, prescan=0, nopeepholes=0) at ../../gcc/gcc/final.c:2591
#7  0x08126c0a in final (first=0x40396580, file=0x8385d88, optimize=2,
    prescan=0) at ../../gcc/gcc/final.c:1787
#8  0x081f78b4 in rest_of_compilation (decl=0x401c1d98)
    at ../../gcc/gcc/toplev.c:3464
#9  0x08063d94 in source_end_java_method () at ../../gcc/gcc/java/parse.y:7457
#10 0x08065ab1 in java_expand_method_bodies (class=0x401ba6cc)
    at ../../gcc/gcc/java/parse.y:8133
...

File DTDGramma.java from Apache-XML Xerces-Java project attached. Linking passes with -O0, but not with -O1 or -O2
>How-To-Repeat:
arm-linux-gcj -fCLASSPATH=upstream/src:./upstream/src -O2 -save-temps -dp -v --encoding=8859_1 -fassume-compiled -O2 -c upstream/src/org/apache/xerces/validators/dtd/DTDGrammar.java -MT upstream/src/org/apache/xerces/validators/dtd/lib_org_apache_xerces_la-DTDGrammar.lo -MD -MP -MF upstream/src/org/apache/xerces/validators/dtd/.deps/lib_org_apache_xerces_la-DTDGrammar.TPlo  -fPIC  -o upstream/src/org/apache/xerces/validators/dtd/.libs/lib_org_apache_xerces_la-DTDGrammar.lo

Have not tried to minimize test-case yet.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-java; name="DTDGrammar.java"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="DTDGrammar.java"

LyoKICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQogKgogKgogKiBD
b3B5cmlnaHQgKGMpIDIwMDAgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJp
Z2h0cyAKICogcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1l
dDoKICoKICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKICoKICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluCiAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKICogICAgZGlzdHJpYnV0aW9uLgogKgogKiAzLiBUaGUgZW5kLXVzZXIgZG9j
dW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKICogICAgaWYgYW55
LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAogKiAgICAgICAi
VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKICogICAgICAg
IEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCiAq
ICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNv
ZnR3YXJlIGl0c2VsZiwKICogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNr
bm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KICoKICogNC4gVGhlIG5hbWVzICJYZXJjZXMi
IGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKICogICAgbm90IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCiAqICAgIHNv
ZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKICog
ICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCiAqCiAqIDUu
IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJB
cGFjaGUiLAogKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRo
b3V0IHByaW9yIHdyaXR0ZW4KICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJl
IEZvdW5kYXRpb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFO
RCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKICogT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKICogRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgog
KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgogKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECiAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAogKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQKICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAqIFNVQ0ggREFNQUdFLgogKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQogKgogKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25z
IG1hZGUgYnkgbWFueQogKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKICogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBj
b3B5cmlnaHQgKGMpIDE5OTksIEludGVybmF0aW9uYWwKICogQnVzaW5lc3MgTWFjaGluZXMsIElu
Yy4sIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy4gIEZvciBtb3JlCiAqIGluZm9ybWF0aW9uIG9uIHRo
ZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQogKiA8aHR0cDovL3d3dy5h
cGFjaGUub3JnLz4uCiAqLwoKcGFja2FnZSBvcmcuYXBhY2hlLnhlcmNlcy52YWxpZGF0b3JzLmR0
ZDsKCmltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy5kb20uRG9jdW1lbnRJbXBsOwppbXBvcnQgb3Jn
LmFwYWNoZS54ZXJjZXMuZnJhbWV3b3JrLlhNTENvbnRlbnRTcGVjOwppbXBvcnQgb3JnLmFwYWNo
ZS54ZXJjZXMuZnJhbWV3b3JrLlhNTERURFNjYW5uZXI7CmltcG9ydCBvcmcuYXBhY2hlLnhlcmNl
cy5yZWFkZXJzLlhNTEVudGl0eUhhbmRsZXI7CmltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGls
cy5RTmFtZTsKaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWxzLlN0cmluZ1Bvb2w7CmltcG9y
dCBvcmcuYXBhY2hlLnhlcmNlcy52YWxpZGF0b3JzLmNvbW1vbi5HcmFtbWFyOwppbXBvcnQgb3Jn
LmFwYWNoZS54ZXJjZXMudmFsaWRhdG9ycy5jb21tb24uWE1MQXR0cmlidXRlRGVjbDsKaW1wb3J0
IG9yZy5hcGFjaGUueGVyY2VzLnZhbGlkYXRvcnMuY29tbW9uLlhNTEVsZW1lbnREZWNsOwppbXBv
cnQgb3JnLmFwYWNoZS54ZXJjZXMudmFsaWRhdG9ycy5kYXRhdHlwZS5EYXRhdHlwZVZhbGlkYXRv
ckZhY3RvcnlJbXBsOwppbXBvcnQgb3JnLmFwYWNoZS54ZXJjZXMudmFsaWRhdG9ycy5zY2hlbWEu
WFV0aWw7CgppbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CmltcG9ydCBvcmcudzNjLmRvbS5F
bGVtZW50OwppbXBvcnQgb3JnLnczYy5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uOwppbXBvcnQg
b3JnLnczYy5kb20uVGV4dDsKCi8qKgogKiBBIERURCBncmFtbWFyLiBUaGlzIGNsYXNzIGlzIGFu
IEV2ZW50SGFuZGxlciB0byByZWNlaXZlIGNhbGxiYWNrcyBmcm9tCiAqIHRoZSBYTUxEVERTY2Fu
bmVyLiBXaGVuIHRoZSBjYWxsYmFja3MgYXJlIHJlY2VpdmVkLCB0aGUgZ3JhbW1hciBzdHJ1Y3R1
cmVzCiAqIGFyZSBkaXJlY3RseSBwb3B1bGF0ZWQgZnJvbSB0aGUgY2FsbGJhY2sgaW5mb3JtYXRp
b24uCiAqIDxwPgogKiBJbiBhZGRpdGlvbiB0byBiZWluZyBhIHJlY2lwaWVudCBvZiBzY2FubmVy
IGNhbGxiYWNrcywgdGhlIERURCBncmFtbWFyCiAqIGNsYXNzIGNhbiBhY3QgYXMgYSBwYXNzLXRo
cm91Z2ggZmlsdGVyIGZvciB0aGUgRFREIGV2ZW50cy4gVGhpcyBpcyB1c2VmdWwKICogZm9yIHBh
cnNlcnMgdGhhdCBtdXN0IGV4cG9zZSB0aGUgRFREIGluZm9ybWF0aW9uIHRvIHRoZSBhcHBsaWNh
dGlvbi4gKGUuZy4KICogU0FYMiBEZWNsSGFuZGxlciBjYWxsYmFja3MuKQogKgogKiBAYXV0aG9y
IEFuZHkgQ2xhcmsKICogQHZlcnNpb24gJElkOiBEVERHcmFtbWFyLmphdmEsdiAxLjEwIDIwMDEv
MDcvMjAgMTc6Mjc6MzggbG1hcnRpbiBFeHAgJAogKi8KcHVibGljIGNsYXNzIERUREdyYW1tYXIK
ICAgIGV4dGVuZHMgR3JhbW1hciAKICAgIGltcGxlbWVudHMgWE1MRFREU2Nhbm5lci5FdmVudEhh
bmRsZXIgewoKICAgIC8vIFJFVklTSVQ6IFRoZSBncmFtbWFyIGFjY2VzcyBjdXJyZW50bHkgaW1w
bGVtZW50ZWQgaW4gdGhpcyBncmFtbWFyCiAgICAvLyAgICAgICAgICBpbnN0YW5jZSBpcyBhIGRy
YWZ0IGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgcmV2aXNpdGVkCiAgICAvLyAgICAgICAg
ICBpbiBvcmRlciB0byBkZXNpZ24gYSBwcm9wZXIgRFREIGZvciB0aGUgdGhpcyBncmFtbWFyCiAg
ICAvLyAgICAgICAgICByZXByZXNlbnRhdGlvbi4gLUFjCgogICAgLy8KICAgIC8vIENvbnN0YW50
cwogICAgLy8KCiAgICAvKiogQ2h1bmsgc2hpZnQuICovCiAgICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgQ0hVTktfU0hJRlQgPSA4OyAvLyAyXjggPSAyNTYKCiAgICAvKiogQ2h1bmsgc2l6ZS4g
Ki8KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSFVOS19TSVpFID0gKDEgPDwgQ0hVTktf
U0hJRlQpOwoKICAgIC8qKiBDaHVuayBtYXNrLiAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IENIVU5LX01BU0sgPSBDSFVOS19TSVpFIC0gMTsKCiAgICAvKiogSW5pdGlhbCBjaHVuayBj
b3VudC4gKi8KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTklUSUFMX0NIVU5LX0NPVU5U
ID0gKDEgPDwgKDEwIC0gQ0hVTktfU0hJRlQpKTsgLy8gMl4xMCA9IDFrCgogICAgLy8KICAgIC8v
IERhdGEKICAgIC8vCgogICAgLy8gc3RyaW5nIHBvb2wKCiAgICAvKiogU3RyaW5nIHBvb2wuICov
CiAgICBwcml2YXRlIFN0cmluZ1Bvb2wgZlN0cmluZ1Bvb2w7CgogICAgLy8gImNvbXBpbGVkIiBp
bmZvcm1hdGlvbiBzdHJ1Y3R1cmVzCgogICAgLyoqIEVsZW1lbnQgZGVjbGFyYXRpb24uICovCiAg
ICBwcml2YXRlIFhNTEVsZW1lbnREZWNsIGZFbGVtZW50RGVjbCA9IG5ldyBYTUxFbGVtZW50RGVj
bCgpOwoKICAgIC8qKiBBdHRyaWJ1dGUgZGVjbGFyYXRpb24uICovCiAgICBwcml2YXRlIFhNTEF0
dHJpYnV0ZURlY2wgZkF0dHJpYnV0ZURlY2wgPSBuZXcgWE1MQXR0cmlidXRlRGVjbCgpOwoKICAg
IC8qKiBDb250ZW50IHNwZWMgbm9kZS4gKi8KICAgIHByaXZhdGUgWE1MQ29udGVudFNwZWMgZkNv
bnRlbnRTcGVjID0gbmV3IFhNTENvbnRlbnRTcGVjKCk7CgogICAgLy8gZ3JhbW1hciBkb2N1bWVu
dAoKICAgIC8qKiBHcmFtbWFyIGRvY3VtZW50LiAqLwogICAgcHJpdmF0ZSBEb2N1bWVudCBmR3Jh
bW1hckRvY3VtZW50OwoKICAgIC8qKiBSb290IGVsZW1lbnQuICovCiAgICBwcml2YXRlIEVsZW1l
bnQgZlJvb3RFbGVtZW50OwoKICAgIHByaXZhdGUgUU5hbWUgZlJvb3RFbGVtZW50UU5hbWUgPSBu
ZXcgUU5hbWUoKTsKCiAgICAvKiogQ3VycmVudCBlbGVtZW50LiAqLwogICAgcHJpdmF0ZSBFbGVt
ZW50IGZDdXJyZW50RWxlbWVudDsKCiAgICAvLyBwYXNzLXRocm91Z2gKCiAgICAvKiogZmxhZyBp
ZiB0aGUgZWxlbWVudERlY2wgaXMgRXh0ZXJuYWwuICovCiAgICBwcml2YXRlIGludCBmRWxlbWVu
dERlY2xJc0V4dGVybmFsW11bXSA9IG5ldyBpbnRbSU5JVElBTF9DSFVOS19DT1VOVF1bXTsKICAg
IC8qKiBNYXBwaW5nIGZvciBlbGVtZW50IGRlY2xhcmF0aW9ucy4gKi8KICAgIHByaXZhdGUgaW50
IGZFbGVtZW50RGVjbE1hcFtdW10gPSBuZXcgaW50W0lOSVRJQUxfQ0hVTktfQ09VTlRdW107Cgog
ICAgLyoqIGZsYWcgaWYgdGhlIEF0dHJpYnV0ZURlY2wgaXMgRXh0ZXJuYWwuICovCiAgICBwcml2
YXRlIGludCBmQXR0cmlidXRlRGVjbElzRXh0ZXJuYWxbXVtdID0gbmV3IGludFtJTklUSUFMX0NI
VU5LX0NPVU5UXVtdOwogICAgLyoqIE1hcHBpbmcgZm9yIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbnMu
ICovCiAgICBwcml2YXRlIGludCBmQXR0cmlidXRlRGVjbE1hcFtdW10gPSBuZXcgaW50W0lOSVRJ
QUxfQ0hVTktfQ09VTlRdW107CgogICAgLyoqIE1hcHBpbmcgZm9yIGNvbnRlbnQgc3BlYyBub2Rl
cy4gKi8KICAgIHByaXZhdGUgaW50IGZDb250ZW50U3BlY01hcFtdW10gPSBuZXcgaW50W0lOSVRJ
QUxfQ0hVTktfQ09VTlRdW107CgogICAgLy8gdGVtcCB2YXJzCgogICAgcHJpdmF0ZSBRTmFtZSBm
UU5hbWUgPSBuZXcgUU5hbWUoKTsKCiAgICAvLwogICAgLy8gQ29uc3RydWN0b3JzCiAgICAvLwoK
ICAgIC8qKiBEZWZhdWx0IGNvbnN0cnVjdG9yLiAqLwogICAgcHVibGljIERUREdyYW1tYXIoU3Ry
aW5nUG9vbCBzdHJpbmdQb29sKSB7CiAgICAgICAgcmVzZXQoc3RyaW5nUG9vbCk7CiAgICB9Cgog
ICAgLy8KICAgIC8vIFB1YmxpYyBtZXRob2RzCiAgICAvLwoKICAgIC8qKiBSZXNldHMgdGhlIERU
RCBncmFtbWFyLiAqLwogICAgcHVibGljIHZvaWQgcmVzZXQoU3RyaW5nUG9vbCBzdHJpbmdQb29s
KSB7CiAgICAgICAgZlN0cmluZ1Bvb2wgPSBzdHJpbmdQb29sOwogICAgfQoKICAgIC8vCiAgICAv
LyBYTUxEVERTY2FubmVyLkV2ZW50SGFuZGxlciBtZXRob2RzCiAgICAvLwoKICAgIC8qKiBTdGFy
dCBvZiBEVEQuICovCiAgICBwdWJsaWMgdm9pZCBjYWxsU3RhcnREVEQoKSB0aHJvd3MgRXhjZXB0
aW9uIHsKICAgICAgICAKICAgICAgICAvLyBzZXR1cCBncmFtbWFyIGRvY3VtZW50CiAgICAgICAg
c2V0R3JhbW1hckRvY3VtZW50KG51bGwpOwogICAgICAgIGZHcmFtbWFyRG9jdW1lbnQgPSBuZXcg
RG9jdW1lbnRJbXBsKCk7CiAgICAgICAgZlJvb3RFbGVtZW50ID0gZkdyYW1tYXJEb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkdGQiKTsKICAgICAgICBmQ3VycmVudEVsZW1lbnQgPSBmUm9vdEVsZW1l
bnQ7CgogICAgfSAvLyBjYWxsU3RhcnREVEQoKQoKICAgIC8qKiBFbmQgb2YgRFRELiAqLwogICAg
cHVibGljIHZvaWQgY2FsbEVuZERURCgpIHRocm93cyBFeGNlcHRpb24gewoKICAgICAgICAvLyBz
ZXQgZ3JhbW1hciBkb2N1bWVudAogICAgICAgIHNldEdyYW1tYXJEb2N1bWVudChmR3JhbW1hckRv
Y3VtZW50KTsKCiAgICB9IC8vIGNhbGxFbmREVEQoKQoKICAgIC8qKgogICAgICogU2lnbmFsIHRo
ZSBUZXh0IGRlY2xhcmF0aW9uIG9mIGFuIGV4dGVybmFsIGVudGl0eS4KICAgICAqCiAgICAgKiBA
cGFyYW0gdmVyc2lvbiB0aGUgaGFuZGxlIGluIHRoZSBzdHJpbmcgcG9vbCBmb3IgdGhlIHZlcnNp
b24gbnVtYmVyCiAgICAgKiBAcGFyYW0gZW5jb2RpbmcgdGhlIGhhbmRsZSBpbiB0aGUgc3RyaW5n
IHBvb2wgZm9yIHRoZSBlbmNvZGluZwogICAgICogQGV4Y2VwdGlvbiBqYXZhLmxhbmcuRXhjZXB0
aW9uCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIGNhbGxUZXh0RGVjbChpbnQgdmVyc2lvbiwgaW50
IGVuY29kaW5nKSB0aHJvd3MgRXhjZXB0aW9uIHsKCiAgICAgICAgLy8gY3JlYXRlIHRleHQgZGVj
bAogICAgICAgIEVsZW1lbnQgdGV4dERlY2wgPSBmR3JhbW1hckRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInRleHREZWNsIik7CiAgICAgICAgdGV4dERlY2wuc2V0QXR0cmlidXRlKCJ2ZXJzaW9uIiwg
ZlN0cmluZ1Bvb2wudG9TdHJpbmcodmVyc2lvbikpOwogICAgICAgIHRleHREZWNsLnNldEF0dHJp
YnV0ZSgiZW5jb2RpbmciLCBmU3RyaW5nUG9vbC50b1N0cmluZyhlbmNvZGluZykpOwogICAgICAg
IGZDdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0RGVjbCk7CgogICAgfSAvLyBjYWxsVGV4
dERlY2woaW50LGludCkKCiAgICAvKioKICAgICAqIENhbGxlZCB3aGVuIHRoZSBkb2N0eXBlIGRl
Y2wgaXMgc2Nhbm5lZAogICAgICoKICAgICAqIEBwYXJhbSByb290RWxlbWVudFR5cGUgaGFuZGxl
IG9mIHRoZSByb290RWxlbWVudAogICAgICogQHBhcmFtIHB1YmxpY0lkIFN0cmluZ1Bvb2wgaGFu
ZGxlIG9mIHRoZSBwdWJsaWMgaWQKICAgICAqIEBwYXJhbSBzeXN0ZW1JZCBTdHJpbmdQb29sIGhh
bmRsZSBvZiB0aGUgc3lzdGVtIGlkCiAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5FeGNlcHRp
b24KICAgICAqLwogICAgcHVibGljIHZvaWQgZG9jdHlwZURlY2woUU5hbWUgcm9vdEVsZW1lbnQs
IGludCBwdWJsaWNJZCwgaW50IHN5c3RlbUlkKSAKICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsK
CiAgICAgICAgLy8gY3JlYXRlIGRvY3R5cGUgZGVjbAogICAgICAgIEVsZW1lbnQgZG9jdHlwZURl
Y2wgPSBmR3JhbW1hckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvY3R5cGVEZWNsIik7CiAgICAg
ICAgZG9jdHlwZURlY2wuc2V0QXR0cmlidXRlKCJuYW1lIiwgZlN0cmluZ1Bvb2wudG9TdHJpbmco
cm9vdEVsZW1lbnQucmF3bmFtZSkpOwogICAgICAgIGlmIChyb290RWxlbWVudC51cmkgIT0gU3Ry
aW5nUG9vbC5FTVBUWV9TVFJJTkcpIHsKICAgICAgICAgICAgZG9jdHlwZURlY2wuc2V0QXR0cmli
dXRlKCJ4bWxuczoiK2ZTdHJpbmdQb29sLnRvU3RyaW5nKHJvb3RFbGVtZW50LnByZWZpeCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmU3RyaW5nUG9vbC50b1N0cmluZyhy
b290RWxlbWVudC51cmkpKTsKICAgICAgICB9CiAgICAgICAgZG9jdHlwZURlY2wuc2V0QXR0cmli
dXRlKCJwdWJsaWNJZCIsIGZTdHJpbmdQb29sLnRvU3RyaW5nKHB1YmxpY0lkKSk7CiAgICAgICAg
ZG9jdHlwZURlY2wuc2V0QXR0cmlidXRlKCJzeXN0ZW1JZCIsIGZTdHJpbmdQb29sLnRvU3RyaW5n
KHN5c3RlbUlkKSk7CiAgICAgICAgZkN1cnJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGRvY3R5cGVE
ZWNsKTsKCiAgICAgICAgLy9mUm9vdEVsZW1lbnRRTmFtZS5zZXRWYWx1ZXMoLTEsIHJvb3RFbGVt
ZW50LnJhd25hbWUsIC0xLCAtMSk7CiAgICAgICAgZlJvb3RFbGVtZW50UU5hbWUuc2V0VmFsdWVz
KHJvb3RFbGVtZW50KTsKCiAgICB9IC8vIGRvY3R5cGVEZWNsKFFOYW1lLGludCxpbnQpOwoKICAg
IC8qKgogICAgICogQ2FsbGVkIHdoZW4gdGhlIERURFNjYW5uZXIgc3RhcnRzIHJlYWRpbmcgZnJv
bSB0aGUgZXh0ZXJuYWwgc3Vic2V0CiAgICAgKgogICAgICogQHBhcmFtIHB1YmxpY0lkIFN0cmlu
Z1Bvb2wgaGFuZGxlIG9mIHRoZSBwdWJsaWMgaWQKICAgICAqIEBwYXJhbSBzeXN0ZW1JZCBTdHJp
bmdQb29sIGhhbmRsZSBvZiB0aGUgc3lzdGVtIGlkCiAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFu
Zy5FeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHZvaWQgc3RhcnRSZWFkaW5nRnJvbUV4dGVy
bmFsU3Vic2V0KGludCBwdWJsaWNJZCwgaW50IHN5c3RlbUlkKSAKICAgICAgICB0aHJvd3MgRXhj
ZXB0aW9uIHsKCiAgICAgICAgLy8gY3JlYXRlIGV4dGVybmFsIHN1YnNldAogICAgICAgIEVsZW1l
bnQgZXh0ZXJuYWxTdWJzZXQgPSBmR3JhbW1hckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImV4dGVy
bmFsIik7CiAgICAgICAgZXh0ZXJuYWxTdWJzZXQuc2V0QXR0cmlidXRlKCJwdWJsaWNJZCIsIGZT
dHJpbmdQb29sLnRvU3RyaW5nKHB1YmxpY0lkKSk7CiAgICAgICAgZXh0ZXJuYWxTdWJzZXQuc2V0
QXR0cmlidXRlKCJzeXN0ZW1JZCIsIGZTdHJpbmdQb29sLnRvU3RyaW5nKHN5c3RlbUlkKSk7CiAg
ICAgICAgZkN1cnJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGV4dGVybmFsU3Vic2V0KTsKICAgICAg
ICBmQ3VycmVudEVsZW1lbnQgPSBleHRlcm5hbFN1YnNldDsKCiAgICB9IC8vIHN0YXJ0UmVhZGlu
Z0Zyb21FeHRlcm5hbFN1YnNldChpbnQsaW50KQoKICAgIC8qKgogICAgICogQ2FsbGVkIHdoZW4g
dGhlIERURFNjYW5uZXIgc3RvcCByZWFkaW5nIGZyb20gdGhlIGV4dGVybmFsIHN1YnNldAogICAg
ICoKICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLkV4Y2VwdGlvbgogICAgICovCiAgICBwdWJs
aWMgdm9pZCBzdG9wUmVhZGluZ0Zyb21FeHRlcm5hbFN1YnNldCgpIHRocm93cyBFeGNlcHRpb24g
ewoKICAgICAgICAvLyBnZXQgb3V0IG9mIGV4dGVybmFsIHN1YnNldAogICAgICAgIGZDdXJyZW50
RWxlbWVudCA9IChFbGVtZW50KWZDdXJyZW50RWxlbWVudC5nZXRQYXJlbnROb2RlKCk7CgogICAg
fSAvLyBzdG9wUmVhZGluZ0Zyb21FeHRlcm5hbFN1YnNldCgpCgogICAgLyoqCiAgICAgKiBBZGQg
YW4gZWxlbWVudCBkZWNsYXJhdGlvbiAoZm9yd2FyZCByZWZlcmVuY2UpCiAgICAgKgogICAgICog
QHBhcmFtIGhhbmRsZSB0byB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCBiZWluZyBkZWNsYXJlZAog
ICAgICogQHJldHVybiBoYW5kbGUgdG8gdGhlIGVsZW1lbnQgd2hvc2UgZGVjbGFyYXRpb24gd2Fz
IGFkZGVkCiAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5FeGNlcHRpb24KICAgICAqLwogICAg
cHVibGljIGludCBhZGRFbGVtZW50RGVjbChRTmFtZSBlbGVtZW50RGVjbCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7CgogICAgICAgIC8vIGNyZWF0ZSBlbGVtZW50IGRlY2wgZWxlbWVudAogICAgICAgIEVs
ZW1lbnQgZWxlbWVudERlY2xFbGVtZW50ID0gZkdyYW1tYXJEb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJlbGVtZW50RGVjbCIpOwogICAgICAgIGVsZW1lbnREZWNsRWxlbWVudC5zZXRBdHRyaWJ1dGUo
Im5hbWUiLCBmU3RyaW5nUG9vbC50b1N0cmluZyhlbGVtZW50RGVjbC5sb2NhbHBhcnQpKTsKICAg
ICAgICBpZiAoZWxlbWVudERlY2wudXJpICE9IFN0cmluZ1Bvb2wuRU1QVFlfU1RSSU5HKSB7CiAg
ICAgICAgICAgIGVsZW1lbnREZWNsRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIrZlN0cmlu
Z1Bvb2wudG9TdHJpbmcoZWxlbWVudERlY2wucHJlZml4KSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmU3RyaW5nUG9vbC50b1N0cmluZyhlbGVtZW50RGVjbC51
cmkpKTsKICAgICAgICB9CiAgICAgICAgZkN1cnJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1l
bnREZWNsRWxlbWVudCk7CgogICAgICAgIC8vIGNyZWF0ZSBlbGVtZW50IGRlY2wKICAgICAgICBp
bnQgZWxlbWVudERlY2xJbmRleCA9IGNyZWF0ZUVsZW1lbnREZWNsKCk7CgogICAgICAgIC8vIHNl
dCBlbGVtZW50IGRlY2wgdmFsdWVzCiAgICAgICAgZkVsZW1lbnREZWNsLmNsZWFyKCk7CiAgICAg
ICAgZkVsZW1lbnREZWNsLm5hbWUuc2V0VmFsdWVzKGVsZW1lbnREZWNsKTsKICAgICAgICBzZXRF
bGVtZW50RGVjbChlbGVtZW50RGVjbEluZGV4LCBmRWxlbWVudERlY2wpOwoKICAgICAgICAvLyBy
ZXR1cm4gaW5kZXgKICAgICAgICByZXR1cm4gZWxlbWVudERlY2xJbmRleDsKCiAgICB9IC8vIGFk
ZEVsZW1lbnREZWNsKFFOYW1lKTppbnQKCiAgICAvKioKICAgICAqIEFkZCBhbiBlbGVtZW50IGRl
Y2xhcmF0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGhhbmRsZSB0byB0aGUgbmFtZSBvZiB0aGUg
ZWxlbWVudCBiZWluZyBkZWNsYXJlZAogICAgICogQHBhcmFtIGNvbnRlbnRTcGVjVHlwZSBoYW5k
bGUgdG8gdGhlIHR5cGUgbmFtZSBvZiB0aGUgY29udGVudCBzcGVjCiAgICAgKiBAcGFyYW0gQ29u
dGVudFNwZWMgaGFuZGxlIHRvIHRoZSBjb250ZW50IHNwZWMgbm9kZSBmb3IgdGhlIGNvbnRlbnRT
cGVjVHlwZQogICAgICogQHJldHVybiBoYW5kbGUgdG8gdGhlIGVsZW1lbnQgZGVjbGFyYXRpb24g
dGhhdCB3YXMgYWRkZWQgCiAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5FeGNlcHRpb24KICAg
ICAqLwogICAgcHVibGljIGludCBhZGRFbGVtZW50RGVjbChRTmFtZSBlbGVtZW50RGVjbCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb250ZW50U3BlY1R5cGUsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udGVudFNwZWMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2xlYW4gaXNFeHRlcm5hbCkgdGhyb3dzIEV4Y2VwdGlvbiB7CgogICAg
ICAgIC8vIGNyZWF0ZSBlbGVtZW50IGRlY2wgZWxlbWVudAogICAgICAgIEVsZW1lbnQgZWxlbWVu
dERlY2xFbGVtZW50ID0gZkdyYW1tYXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJlbGVtZW50RGVj
bCIpOwogICAgICAgIGVsZW1lbnREZWNsRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBmU3Ry
aW5nUG9vbC50b1N0cmluZyhlbGVtZW50RGVjbC5sb2NhbHBhcnQpKTsKICAgICAgICBpZiAoZWxl
bWVudERlY2wudXJpICE9IFN0cmluZ1Bvb2wuRU1QVFlfU1RSSU5HKSB7CiAgICAgICAgICAgIGVs
ZW1lbnREZWNsRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIrZlN0cmluZ1Bvb2wudG9TdHJp
bmcoZWxlbWVudERlY2wucHJlZml4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmU3RyaW5nUG9vbC50b1N0cmluZyhlbGVtZW50RGVjbC51cmkpKTsKICAgICAg
ICB9CiAgICAgICAgZWxlbWVudERlY2xFbGVtZW50LnNldEF0dHJpYnV0ZSgidHlwZSIsIGZTdHJp
bmdQb29sLnRvU3RyaW5nKGNvbnRlbnRTcGVjVHlwZSkpOwogICAgICAgIC8vIFJFVklTSVQ6IFRy
YXZlcnNlIGNvbnRlbnQgc3BlYyBzdHJ1Y3R1cmUsIGJ1aWxkaW5nIGNvbnRlbnQgbW9kZWwKICAg
ICAgICAvLyAgICAgICAgICBkZXNjcmlwdGlvbiB0byBwdXQgaW50byBncmFtbWFyIGRvY3VtZW50
LgogICAgICAgIGZDdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50RGVjbEVsZW1lbnQp
OwoKICAgICAgICAvLyBjcmVhdGUgZWxlbWVudCBkZWNsCiAgICAgICAgaW50IGVsZW1lbnREZWNs
SW5kZXggPSBjcmVhdGVFbGVtZW50RGVjbCgpOwoKICAgICAgICAvLyBzZXQgZWxlbWVudCBkZWNs
IHZhbHVlcwogICAgICAgIGZFbGVtZW50RGVjbC5jbGVhcigpOwogICAgICAgIGZFbGVtZW50RGVj
bC5uYW1lLnNldFZhbHVlcyhlbGVtZW50RGVjbCk7CiAgICAgICAgZkVsZW1lbnREZWNsLnR5cGUg
PSBjb250ZW50U3BlY1R5cGU7CiAgICAgICAgZkVsZW1lbnREZWNsLmNvbnRlbnRTcGVjSW5kZXgg
PSBjb250ZW50U3BlYzsKICAgICAgICBzZXRFbGVtZW50RGVjbChlbGVtZW50RGVjbEluZGV4LCBm
RWxlbWVudERlY2wpOwogICAgICAgIAogICAgICAgIGludCBjaHVuayA9IGVsZW1lbnREZWNsSW5k
ZXggPj4gQ0hVTktfU0hJRlQ7CiAgICAgICAgaW50IGluZGV4ID0gZWxlbWVudERlY2xJbmRleCAm
IENIVU5LX01BU0s7CiAgICAgICAgZW5zdXJlRWxlbWVudERlY2xDYXBhY2l0eShjaHVuayk7CiAg
ICAgICAgZkVsZW1lbnREZWNsSXNFeHRlcm5hbFtjaHVua11baW5kZXhdID0gaXNFeHRlcm5hbD8g
MSA6IDA7CgogICAgICAgIC8vIHJldHVybiBpbmRleAogICAgICAgIHJldHVybiBlbGVtZW50RGVj
bEluZGV4OwoKICAgIH0gLy8gYWRkRWxlbWVudERlY2woUU5hbWUsaW50LGludCk6aW50CgogICAg
cHJvdGVjdGVkIHZvaWQgcHV0RWxlbWVudE5hbWVNYXBwaW5nKFFOYW1lIG5hbWUsIGludCBzY29w
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZWxlbWVudERl
Y2xJbmRleCkgewogICAgICAgIGZRTmFtZS51cmkgPSBTdHJpbmdQb29sLkVNUFRZX1NUUklORzsK
ICAgICAgICBmUU5hbWUubG9jYWxwYXJ0ID0gbmFtZS5yYXduYW1lOwogICAgICAgIHN1cGVyLnB1
dEVsZW1lbnROYW1lTWFwcGluZyhmUU5hbWUsIHNjb3BlLCBlbGVtZW50RGVjbEluZGV4KTsKICAg
IH0KCiAgICAvKioqCiAgICBwdWJsaWMgaW50IGdldEVsZW1lbnREZWNsSW5kZXgoaW50IGxvY2Fs
cGFydEluZGV4LCBpbnQgc2NvcGVJbmRleCkgewogICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxu
KCJnZXRFbGVtZW50RGVjbEluZGV4OiAiK2xvY2FscGFydEluZGV4KyIsICIrc2NvcGVJbmRleCk7
CiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEVsZW1lbnREZWNsSW5kZXgobG9jYWxwYXJ0SW5kZXgs
IHNjb3BlSW5kZXgpOwogICAgfQoKICAgIHB1YmxpYyBpbnQgZ2V0RWxlbWVudERlY2xJbmRleChp
bnQgdXJpSW5kZXgsIGludCBsb2NhbHBhcnRJbmRleCwgaW50IHNjb3BlSW5kZXgpIHsKICAgICAg
ICAvL1N5c3RlbS5vdXQucHJpbnRsbigiISEhIGdldEVsZW1lbnREZWNsSW5kZXg6ICIrdXJpSW5k
ZXgrIiwgIitsb2NhbHBhcnRJbmRleCsiLCAiK3Njb3BlSW5kZXgpOwogICAgICAgIHJldHVybiBz
dXBlci5nZXRFbGVtZW50RGVjbEluZGV4KGxvY2FscGFydEluZGV4LCAtMSk7CiAgICB9CiAgICAv
KioqLwogICAgCiAgICBwdWJsaWMgaW50IGdldEVsZW1lbnREZWNsSW5kZXgoUU5hbWUgZWxlbWVu
dCwgaW50IHNjb3BlSW5kZXgpIHsKICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiZ2V0RWxl
bWVudERlY2xJbmRleDogIitlbGVtZW50KyIsICIrc2NvcGVJbmRleCk7CiAgICAgICAgcmV0dXJu
IHN1cGVyLmdldEVsZW1lbnREZWNsSW5kZXgoZWxlbWVudC5yYXduYW1lLCAtMSk7CiAgICB9Cgog
ICAgcHVibGljIHZvaWQgc2V0RWxlbWVudERlY2xEVEQoaW50IGVsZW1lbnREZWNsSW5kZXgsIFhN
TEVsZW1lbnREZWNsIGVsZW1lbnREZWNsKSB7CiAgICAgICAgc3VwZXIuc2V0RWxlbWVudERlY2wo
ZWxlbWVudERlY2xJbmRleCwgZWxlbWVudERlY2wpOwogICAgfQoKICAgIHByaXZhdGUgWE1MQ29u
dGVudFNwZWMgZlRlbXBDb250ZW50U3BlYyA9IG5ldyBYTUxDb250ZW50U3BlYygpOwoKICAgIC8q
KioKICAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnRTcGVjTGVhZihpbnQgY29udGVudFNwZWNJbmRl
eCwgUU5hbWUgZWxlbWVudE5hbWUpIHsKICAgICAgICBmVGVtcENvbnRlbnRTcGVjLnNldFZhbHVl
cyhYTUxDb250ZW50U3BlYy5DT05URU5UU1BFQ05PREVfTEVBRiwgZWxlbWVudE5hbWUucmF3bmFt
ZSwgLTEpOwogICAgICAgIHN1cGVyLnNldENvbnRlbnRTcGVjKGNvbnRlbnRTcGVjSW5kZXgsIGZU
ZW1wQ29udGVudFNwZWMpOwogICAgfQogICAgLyoqKi8KCiAgICBwdWJsaWMgdm9pZCBzZXRFbGVt
ZW50RGVjbElzRXh0ZXJuYWwoaW50IGVsZW1lbnREZWNsSW5kZXgsIGJvb2xlYW4gIGlzRXh0ZXJu
YWwpIHsKICAgICAgICBpbnQgY2h1bmsgPSBlbGVtZW50RGVjbEluZGV4ID4+IENIVU5LX1NISUZU
OwogICAgICAgIGludCBpbmRleCA9IGVsZW1lbnREZWNsSW5kZXggJiBDSFVOS19NQVNLOwogICAg
ICAgIGVuc3VyZUVsZW1lbnREZWNsQ2FwYWNpdHkoY2h1bmspOwogICAgICAgIGZFbGVtZW50RGVj
bElzRXh0ZXJuYWxbY2h1bmtdW2luZGV4XSA9IGlzRXh0ZXJuYWw/IDEgOiAwOwogICAgfQoKICAg
IC8vIGdldHRlcnMgZm9yIGlzRXh0ZXJuYWxzIAogICAgcHVibGljIGJvb2xlYW4gZ2V0RWxlbWVu
dERlY2xJc0V4dGVybmFsKGludCBlbGVtZW50RGVjbEluZGV4KSB7CiAgICAgICAgaWYgKGVsZW1l
bnREZWNsSW5kZXggPCAwKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAg
ICAgICAgaW50IGNodW5rID0gZWxlbWVudERlY2xJbmRleCA+PiBDSFVOS19TSElGVDsKICAgICAg
ICBpbnQgaW5kZXggPSBlbGVtZW50RGVjbEluZGV4ICYgQ0hVTktfTUFTSzsKICAgICAgICByZXR1
cm4gKGZFbGVtZW50RGVjbElzRXh0ZXJuYWxbY2h1bmtdW2luZGV4XSAhPSAwKTsKICAgIH0KCiAg
ICBwdWJsaWMgYm9vbGVhbiBnZXRBdHRyaWJ1dGVEZWNsSXNFeHRlcm5hbChpbnQgYXR0cmlidXRl
RGVjbEluZGV4KSB7CiAgICAgICAgaWYgKGF0dHJpYnV0ZURlY2xJbmRleCA8IDApIHsKICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpbnQgY2h1bmsgPSBhdHRyaWJ1
dGVEZWNsSW5kZXggPj4gQ0hVTktfU0hJRlQ7CiAgICAgICAgaW50IGluZGV4ID0gYXR0cmlidXRl
RGVjbEluZGV4ICYgQ0hVTktfTUFTSzsKICAgICAgICByZXR1cm4gKGZBdHRyaWJ1dGVEZWNsSXNF
eHRlcm5hbFtjaHVua11baW5kZXhdICE9IDApOwogICAgfQoKICAgIHB1YmxpYyBib29sZWFuIGdl
dFJvb3RFbGVtZW50UU5hbWUoUU5hbWUgcm9vdCkgewogICAgICAgIGlmIChmUm9vdEVsZW1lbnRR
TmFtZS5yYXduYW1lID09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9
CiAgICAgICAgcm9vdC5zZXRWYWx1ZXMoZlJvb3RFbGVtZW50UU5hbWUpOwogICAgICAgIHJldHVy
biB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGFuIGF0dHJpYnV0ZSBkZWZpbml0aW9u
CiAgICAgKgogICAgICogQHBhcmFtIGhhbmRsZSB0byB0aGUgZWxlbWVudCB3aG9zZSBhdHRyaWJ1
dGUgaXMgYmVpbmcgZGVjbGFyZWQKICAgICAqIEBwYXJhbSBhdHROYW1lIFN0cmluZ1Bvb2wgaGFu
ZGxlIHRvIHRoZSBhdHRyaWJ1dGUgbmFtZSBiZWluZyBkZWNsYXJlZAogICAgICogQHBhcmFtIGF0
dFR5cGUgdHlwZSBvZiB0aGUgYXR0cmlidXRlCiAgICAgKiBAcGFyYW0gZW51bWVyYXRpb24gU3Ry
aW5nUG9vbCBoYW5kbGUgb2YgdGhlIGF0dHJpYnV0ZSdzIGVudW1lcmF0aW9uIGxpc3QgKGlmIGFu
eSkKICAgICAqIEBwYXJhbSBhdHREZWZhdWx0VHlwZSBhbiBpbnRlZ2VyIHZhbHVlIGRlbm90aW5n
IHRoZSBEZWZhdWx0RGVjbCB2YWx1ZQogICAgICogQHBhcmFtIGF0dERlZmF1bHRWYWx1ZSBTdHJp
bmdQb29sIGhhbmRsZSBvZiB0aGlzIGF0dHJpYnV0ZSdzIGRlZmF1bHQgdmFsdWUKICAgICAqIEBy
ZXR1cm4gaGFuZGxlIHRvIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbgogICAgICogQGV4Y2VwdGlv
biBqYXZhLmxhbmcuRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBpbnQgYWRkQXR0RGVmKFFO
YW1lIGVsZW1lbnREZWNsLCBRTmFtZSBhdHRyaWJ1dGVEZWNsLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBhdHRUeXBlLCBib29sZWFuIGF0dExpc3QsIGludCBlbnVtZXJhdGlvbiwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXR0RGVmYXVsdFR5cGUsIGludCBhdHREZWZhdWx0
VmFsdWUsIGJvb2xlYW4gaXNFeHRlcm5hbCkgCiAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CiAg
ICAgICAgLyoqKioKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLWFkZCBhdHRyLS0tICIr
YXR0cmlidXRlRGVjbC5sb2NhbHBhcnQKICAgICAgICAgICAgICAgICAgKyIsIithdHRUeXBlICAg
ICAgICAKICAgICAgICAgICAgICAgICAgKyIsIithdHREZWZhdWx0VHlwZSAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICsiLCIraXNFeHRlcm5hbCk7CiAgICAgICAgIC8qKioqLwoKICAgICAgICAv
LyBjcmVhdGUgYXR0cmlidXRlIGRlY2wgZWxlbWVudAogICAgICAgIEVsZW1lbnQgYXR0cmlidXRl
RGVjbEVsZW1lbnQgPSBmR3JhbW1hckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImF0dHJpYnV0ZURl
Y2wiKTsKICAgICAgICBhdHRyaWJ1dGVEZWNsRWxlbWVudC5zZXRBdHRyaWJ1dGUoImVsZW1lbnQi
LCBmU3RyaW5nUG9vbC50b1N0cmluZyhlbGVtZW50RGVjbC5sb2NhbHBhcnQpKTsKICAgICAgICBh
dHRyaWJ1dGVEZWNsRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBmU3RyaW5nUG9vbC50b1N0
cmluZyhhdHRyaWJ1dGVEZWNsLmxvY2FscGFydCkpOwogICAgICAgIGlmIChhdHRyaWJ1dGVEZWNs
LnVyaSAhPSBTdHJpbmdQb29sLkVNUFRZX1NUUklORykgewogICAgICAgICAgICBhdHRyaWJ1dGVE
ZWNsRWxlbWVudC5zZXRBdHRyaWJ1dGUoInhtbG5zOiIrZlN0cmluZ1Bvb2wudG9TdHJpbmcoYXR0
cmlidXRlRGVjbC5wcmVmaXgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZlN0cmluZ1Bvb2wudG9TdHJpbmcoYXR0cmlidXRlRGVjbC51cmkpKTsKICAgICAg
ICB9CiAgICAgICAgYXR0cmlidXRlRGVjbEVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgZlN0
cmluZ1Bvb2wudG9TdHJpbmcoYXR0VHlwZSkpOwogICAgICAgIC8vIFJFVklTSVQ6IEFkZCBlbnVt
ZXJhdGlvbiBpbmZvcm1hdGlvbiB0byBncmFtbWFyIGRvY3VtZW50LgogICAgICAgIC8vIFJFVklT
SVQ6IERvIHRoZSBkZWZhdWx0IHR5cGUsIHZhbHVlIGJldHRlci4KICAgICAgICBhdHRyaWJ1dGVE
ZWNsRWxlbWVudC5zZXRBdHRyaWJ1dGUoImRlZmF1bHRUeXBlIiwgZlN0cmluZ1Bvb2wudG9TdHJp
bmcoYXR0RGVmYXVsdFR5cGUpKTsKICAgICAgICBhdHRyaWJ1dGVEZWNsRWxlbWVudC5zZXRBdHRy
aWJ1dGUoImRlZmF1bHRWYWx1ZSIsIGZTdHJpbmdQb29sLnRvU3RyaW5nKGF0dERlZmF1bHRWYWx1
ZSkpOwogICAgICAgIGZDdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChhdHRyaWJ1dGVEZWNsRWxl
bWVudCk7CgogICAgICAgIC8vIGNyZWF0ZSBhdHRyaWJ1dGUgZGVjbAogICAgICAgIGludCBhdHRy
aWJ1dGVEZWNsSW5kZXggPSBjcmVhdGVBdHRyaWJ1dGVEZWNsKCk7CgogICAgICAgIC8vIGZpbmQg
dGhlIGRhdGFUeXBlVmFsaWRhdG9yIGFzc29jaWNhdGVkIHdpdGggdGhpcyBhdHRUeXBlCiAgICAg
ICAgU3RyaW5nIGF0dFR5cGVTdHJpbmcgPSAiIjsKICAgICAgICBzd2l0Y2ggKGF0dFR5cGUpIHsK
ICAgICAgICBjYXNlIFhNTEF0dHJpYnV0ZURlY2wuVFlQRV9DREFUQToKICAgICAgICAgICAgYXR0
VHlwZVN0cmluZyA9ICJzdHJpbmciOwogICAgICAgIGNhc2UgWE1MQXR0cmlidXRlRGVjbC5UWVBF
X0VOVElUWToKICAgICAgICAgICAgYXR0VHlwZVN0cmluZyA9ICJFTlRJVFkiOzsKICAgICAgICBj
YXNlIFhNTEF0dHJpYnV0ZURlY2wuVFlQRV9FTlVNRVJBVElPTjoKICAgICAgICAgICAgYXR0VHlw
ZVN0cmluZyA9ICJFTlVNRVJBVElPTiI7OwogICAgICAgIGNhc2UgWE1MQXR0cmlidXRlRGVjbC5U
WVBFX0lEOgogICAgICAgICAgICBhdHRUeXBlU3RyaW5nID0gIklEIjs7CiAgICAgICAgY2FzZSBY
TUxBdHRyaWJ1dGVEZWNsLlRZUEVfSURSRUY6CiAgICAgICAgICAgIGF0dFR5cGVTdHJpbmcgPSAi
SURSRUYiOzsKICAgICAgICBjYXNlIFhNTEF0dHJpYnV0ZURlY2wuVFlQRV9OTVRPS0VOOgogICAg
ICAgICAgICBhdHRUeXBlU3RyaW5nID0gIk5NVE9LRU4iOzsKICAgICAgICBjYXNlIFhNTEF0dHJp
YnV0ZURlY2wuVFlQRV9OT1RBVElPTjoKICAgICAgICAgICAgYXR0VHlwZVN0cmluZyA9ICJOT1RB
VElPTiI7OwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIDsKICAgICAgICB9CgogICAgICAg
IC8vIHNldCBhdHRyaWJ1dGUgZGVjbCB2YWx1ZXMKICAgICAgICBmQXR0cmlidXRlRGVjbC5jbGVh
cigpOwogICAgICAgIGZBdHRyaWJ1dGVEZWNsLm5hbWUuc2V0VmFsdWVzKGF0dHJpYnV0ZURlY2wp
OwogICAgICAgIGZBdHRyaWJ1dGVEZWNsLnR5cGUgPSBhdHRUeXBlOwogICAgICAgIGZBdHRyaWJ1
dGVEZWNsLmxpc3QgPSBhdHRMaXN0OwogICAgICAgIGZBdHRyaWJ1dGVEZWNsLmVudW1lcmF0aW9u
ID0gZW51bWVyYXRpb247CiAgICAgICAgLyoqKgogICAgICAgIGZBdHRyaWJ1dGVEZWNsLmRhdGF0
eXBlVmFsaWRhdG9yID0gCiAgICAgICAgICAgIERhdGF0eXBlVmFsaWRhdG9yRmFjdG9yeUltcGwu
Z2V0RGF0YXR5cGVSZWdpc3RyeSgpLmdldERhdGF0eXBlVmFsaWRhdG9yKGF0dFR5cGVTdHJpbmcp
OwogICAgICAgICoqKiovCiAgICAgICAgZkF0dHJpYnV0ZURlY2wuZGVmYXVsdFR5cGUgPSBhdHRE
ZWZhdWx0VHlwZTsKICAgICAgICBmQXR0cmlidXRlRGVjbC5kZWZhdWx0VmFsdWUgPSBmU3RyaW5n
UG9vbC50b1N0cmluZyhhdHREZWZhdWx0VmFsdWUpOwoKICAgICAgICBpbnQgZWxlbWVudERlY2xJ
bmRleCA9IGdldEVsZW1lbnREZWNsSW5kZXgoZWxlbWVudERlY2wsIC0xKTsKICAgICAgICBzZXRB
dHRyaWJ1dGVEZWNsKGVsZW1lbnREZWNsSW5kZXgsIGF0dHJpYnV0ZURlY2xJbmRleCwgZkF0dHJp
YnV0ZURlY2wpOwoKICAgICAgICBpbnQgY2h1bmsgPSBhdHRyaWJ1dGVEZWNsSW5kZXggPj4gQ0hV
TktfU0hJRlQ7CiAgICAgICAgaW50IGluZGV4ID0gYXR0cmlidXRlRGVjbEluZGV4ICYgQ0hVTktf
TUFTSzsKICAgICAgICBlbnN1cmVBdHRyaWJ1dGVEZWNsQ2FwYWNpdHkoY2h1bmspOwogICAgICAg
IGZBdHRyaWJ1dGVEZWNsSXNFeHRlcm5hbFtjaHVua11baW5kZXhdID0gaXNFeHRlcm5hbCA/ICAx
IDogMDsKCiAgICAgICAgLy8gcmV0dXJuIGluZGV4CiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURl
Y2xJbmRleDsKCiAgICB9IC8vIGFkZEF0dERlZihRTmFtZSxRTmFtZSxpbnQsaW50LGludCxpbnQp
OmludAoKICAgIC8qKgogICAgICogY3JlYXRlIGFuIFhNTENvbnRlbnRTcGVjIGZvciBhIGxlYWYK
ICAgICAqCiAgICAgKiBAcGFyYW0gbmFtZUluZGV4IFN0cmluZ1Bvb2wgaGFuZGxlIHRvIHRoZSBu
YW1lIChFbGVtZW50KSBmb3IgdGhlIG5vZGUKICAgICAqIEByZXR1cm4gaGFuZGxlIHRvIHRoZSBu
ZXdseSBjcmVhdGUgWE1MQ29udGVudFNwZWMKICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLkV4
Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgaW50IGFkZFVuaXF1ZUxlYWZOb2RlKGludCBuYW1l
SW5kZXgpIHRocm93cyBFeGNlcHRpb24gewoKICAgICAgICAvLyBjcmVhdGUgY29udGVudCBzcGVj
IG5vZGUKICAgICAgICBpbnQgY29udGVudFNwZWNJbmRleCA9IGNyZWF0ZUNvbnRlbnRTcGVjKCk7
CgogICAgICAgIC8vIHNldCBjb250ZW50IHNwZWMgbm9kZSB2YWx1ZXMKICAgICAgICBmQ29udGVu
dFNwZWMuc2V0VmFsdWVzKFhNTENvbnRlbnRTcGVjLkNPTlRFTlRTUEVDTk9ERV9MRUFGLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVJbmRleCwgLTEpOwogICAgICAgIHNldENv
bnRlbnRTcGVjKGNvbnRlbnRTcGVjSW5kZXgsIGZDb250ZW50U3BlYyk7CgogICAgICAgIC8vIHJl
dHVybiBpbmRleCAKICAgICAgICByZXR1cm4gY29udGVudFNwZWNJbmRleDsKCiAgICB9IC8vIGFk
ZFVuaXF1ZUxlYWZOb2RlKGludCk6aW50CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4gWE1MQ29u
dGVudFNwZWMgZm9yIGEgc2luZ2xlIG5vbi1sZWFmCiAgICAgKiAKICAgICAqIEBwYXJhbSBub2Rl
VHlwZSB0aGUgdHlwZSBvZiBYTUxDb250ZW50U3BlYyB0byBjcmVhdGUgLSBmcm9tIFhNTENvbnRl
bnRTcGVjLkNPTlRFTlRTUEVDTk9ERV8qCiAgICAgKiBAcGFyYW0gbm9kZVZhbHVlIGhhbmRsZSB0
byBhbiBYTUxDb250ZW50U3BlYwogICAgICogQHJldHVybiBoYW5kbGUgdG8gdGhlIG5ld2x5IGNy
ZWF0ZSBYTUxDb250ZW50U3BlYwogICAgICogQGV4Y2VwdGlvbiBqYXZhLmxhbmcuRXhjZXB0aW9u
CiAgICAgKi8KICAgIHB1YmxpYyBpbnQgYWRkQ29udGVudFNwZWNOb2RlKGludCBub2RlVHlwZSwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm9kZVZhbHVlKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKCiAgICAgICAgLy8gY3JlYXRlIGNvbnRlbnQgc3BlYyBub2RlCiAgICAgICAg
aW50IGNvbnRlbnRTcGVjSW5kZXggPSBjcmVhdGVDb250ZW50U3BlYygpOwoKICAgICAgICAvLyBz
ZXQgY29udGVudCBzcGVjIG5vZGUgdmFsdWVzCiAgICAgICAgZkNvbnRlbnRTcGVjLnNldFZhbHVl
cyhub2RlVHlwZSwgbm9kZVZhbHVlLCAtMSk7CiAgICAgICAgc2V0Q29udGVudFNwZWMoY29udGVu
dFNwZWNJbmRleCwgZkNvbnRlbnRTcGVjKTsKCiAgICAgICAgLy8gcmV0dXJuIGluZGV4IAogICAg
ICAgIHJldHVybiBjb250ZW50U3BlY0luZGV4OwoKICAgIH0gLy8gYWRkQ29udGVudFNwZWNOb2Rl
KGludCxpbnQpOmludAoKICAgIC8qKgogICAgICogQ3JlYXRlIGFuIFhNTENvbnRlbnRTcGVjIGZv
ciBhIHR3byBjaGlsZCBsZWFmCiAgICAgKgogICAgICogQHBhcmFtIG5vZGVUeXBlIHRoZSB0eXBl
IG9mIFhNTENvbnRlbnRTcGVjIHRvIGNyZWF0ZSAtIGZyb20gWE1MQ29udGVudFNwZWMuQ09OVEVO
VFNQRUNOT0RFXyoKICAgICAqIEBwYXJhbSBsZWZ0Tm9kZUluZGV4IGhhbmRsZSB0byBhbiBYTUxD
b250ZW50U3BlYwogICAgICogQHBhcmFtIHJpZ2h0Tm9kZUluZGV4IGhhbmRsZSB0byBhbiBYTUxD
b250ZW50U3BlYwogICAgICogQHJldHVybiBoYW5kbGUgdG8gdGhlIG5ld2x5IGNyZWF0ZSBYTUxD
b250ZW50U3BlYwogICAgICogQGV4Y2VwdGlvbiBqYXZhLmxhbmcuRXhjZXB0aW9uCiAgICAgKi8K
ICAgIHB1YmxpYyBpbnQgYWRkQ29udGVudFNwZWNOb2RlKGludCBub2RlVHlwZSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVmdE5vZGVJbmRleCwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmlnaHROb2RlSW5kZXgpIHRocm93cyBFeGNlcHRp
b24gewoKICAgICAgICAvLyBjcmVhdGUgY29udGVudCBzcGVjIG5vZGUKICAgICAgICBpbnQgY29u
dGVudFNwZWNJbmRleCA9IGNyZWF0ZUNvbnRlbnRTcGVjKCk7CgogICAgICAgIC8vIHNldCBjb250
ZW50IHNwZWMgbm9kZSB2YWx1ZXMKICAgICAgICBmQ29udGVudFNwZWMuc2V0VmFsdWVzKG5vZGVU
eXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnROb2RlSW5kZXgsIHJpZ2h0
Tm9kZUluZGV4KTsKICAgICAgICBzZXRDb250ZW50U3BlYyhjb250ZW50U3BlY0luZGV4LCBmQ29u
dGVudFNwZWMpOwoKICAgICAgICAvLyByZXR1cm4gaW5kZXggCiAgICAgICAgcmV0dXJuIGNvbnRl
bnRTcGVjSW5kZXg7CgogICAgfSAvLyBhZGRDb250ZW50U3BlY05vZGUoaW50LGludCxpbnQpOmlu
dAoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhN
TENvbnRlbnRTcGVjIHRyZWUKICAgICAqIAogICAgICogQHBhcmFtIGhhbmRsZSB0byBhbiBYTUxD
b250ZW50U3BlYwogICAgICogQHJldHVybiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNv
bnRlbnQgc3BlYyB0cmVlCiAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5FeGNlcHRpb24KICAg
ICAqLwogICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50U3BlY05vZGVBc1N0cmluZyhpbnQgbm9k
ZUluZGV4KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICByZXR1cm4gWE1MQ29udGVudFNwZWMu
dG9TdHJpbmcodGhpcywgZlN0cmluZ1Bvb2wsIG5vZGVJbmRleCk7CiAgICB9CgogICAgLyoqCiAg
ICAgKiBTdGFydCB0aGUgc2NvcGUgb2YgYW4gZW50aXR5IGRlY2xhcmF0aW9uLgogICAgICoKICAg
ICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gb24gc3VjY2Vzczsgb3RoZXJ3aXNlCiAgICAg
KiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiB0aGUgZW50aXR5IGRlY2xhcmF0aW9uIGlz
IHJlY3Vyc2l2ZS4KICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLkV4Y2VwdGlvbgogICAgICov
CiAgICBwdWJsaWMgYm9vbGVhbiBzdGFydEVudGl0eURlY2woYm9vbGVhbiBpc1BFLCBpbnQgZW50
aXR5TmFtZSkgCiAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CgogICAgICAgIC8vIGNyZWF0ZSBl
bnRpdHkgZGVjbAogICAgICAgIEVsZW1lbnQgZW50aXR5RGVjbCA9IGZHcmFtbWFyRG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZW50aXR5RGVjbCIpOwogICAgICAgIGVudGl0eURlY2wuc2V0QXR0cmli
dXRlKCJuYW1lIiwgZlN0cmluZ1Bvb2wudG9TdHJpbmcoZW50aXR5TmFtZSkpOwogICAgICAgIGVu
dGl0eURlY2wuc2V0QXR0cmlidXRlKCJwYXJhbWV0ZXIiLCBpc1BFID8gInRydWUiIDogImZhbHNl
Iik7CiAgICAgICAgZkN1cnJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGVudGl0eURlY2wpOwogICAg
ICAgIGZDdXJyZW50RWxlbWVudCA9IGVudGl0eURlY2w7CgogICAgICAgIC8vIHN1Y2Nlc3MKICAg
ICAgICByZXR1cm4gdHJ1ZTsKCiAgICB9IC8vIHN0YXJ0RW50aXR5RGVjbChib29sZWFuLGludCk6
Ym9vbGVhbgoKICAgIC8qKgogICAgICogRW5kIHRoZSBzY29wZSBvZiBhbiBlbnRpdHkgZGVjbGFy
YXRpb24uCiAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5FeGNlcHRpb24KICAgICAqLwogICAg
cHVibGljIHZvaWQgZW5kRW50aXR5RGVjbCgpIHRocm93cyBFeGNlcHRpb24gewoKICAgICAgICAv
LyBnZXQgb3V0IG9mIGVudGl0eSBkZWNsCiAgICAgICAgZkN1cnJlbnRFbGVtZW50ID0gKEVsZW1l
bnQpZkN1cnJlbnRFbGVtZW50LmdldFBhcmVudE5vZGUoKTsKCiAgICB9IC8vIGVuZEVudGl0eURl
Y2woKQoKICAgIC8qKgogICAgICogQWRkIGEgZGVjbGFyYXRpb24gZm9yIGFuIGludGVybmFsIHBh
cmFtZXRlciBlbnRpdHkKICAgICAqCiAgICAgKiBAcGFyYW0gbmFtZSBTdHJpbmdQb29sIGhhbmRs
ZSBvZiB0aGUgcGFyYW1ldGVyIGVudGl0eSBuYW1lCiAgICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5n
UG9vbCBoYW5kbGUgb2YgdGhlIHBhcmFtZXRlciBlbnRpdHkgdmFsdWUKICAgICAqIEByZXR1cm4g
aGFuZGxlIHRvIHRoZSBwYXJhbWV0ZXIgZW50aXR5IGRlY2xhcmF0aW9uCiAgICAgKiBAZXhjZXB0
aW9uIGphdmEubGFuZy5FeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGludCBhZGRJbnRlcm5h
bFBFRGVjbChpbnQgbmFtZSwgaW50IHZhbHVlKSB0aHJvd3MgRXhjZXB0aW9uIHsKCiAgICAgICAg
Ly8gY3JlYXRlIGludGVybmFsIFBFIGRlY2wKICAgICAgICBFbGVtZW50IGludGVybmFsUEVEZWNs
ID0gZkdyYW1tYXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnRlcm5hbFBFRGVjbCIpOwogICAg
ICAgIGludGVybmFsUEVEZWNsLnNldEF0dHJpYnV0ZSgibmFtZSIsIGZTdHJpbmdQb29sLnRvU3Ry
aW5nKG5hbWUpKTsKICAgICAgICBpbnRlcm5hbFBFRGVjbC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwg
ZlN0cmluZ1Bvb2wudG9TdHJpbmcodmFsdWUpKTsKICAgICAgICBmQ3VycmVudEVsZW1lbnQuYXBw
ZW5kQ2hpbGQoaW50ZXJuYWxQRURlY2wpOwoKICAgICAgICAvLyBSRVZJU0lUOiBXaGF0IGlzIG15
IHJlc3BvbnNpYmlsaXR5IGZvciBjcmVhdGluZyBhIGhhbmRsZT8KICAgICAgICBpbnQgcGVEZWNs
SW5kZXggPSAtMTsKCiAgICAgICAgLy8gcmV0dXJuIGluZGV4CiAgICAgICAgcmV0dXJuIHBlRGVj
bEluZGV4OwoKICAgIH0gLy8gYWRkSW50ZXJuYWxQRURlY2woaW50LGludCk6aW50CgogICAgLyoq
CiAgICAgKiBBZGQgYSBkZWNsYXJhdGlvbiBmb3IgYW4gZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0
eQogICAgICoKICAgICAqIEBwYXJhbSBuYW1lIFN0cmluZ1Bvb2wgaGFuZGxlIG9mIHRoZSBwYXJh
bWV0ZXIgZW50aXR5IG5hbWUKICAgICAqIEBwYXJhbSBwdWJsaWNJZCBTdHJpbmdQb29sIGhhbmRs
ZSBvZiB0aGUgcHVibGljSWQKICAgICAqIEBwYXJhbSBzeXN0ZW1JZCBTdHJpbmdQb29sIGhhbmRs
ZSBvZiB0aGUgc3lzdGVtSWQKICAgICAqIEByZXR1cm4gaGFuZGxlIHRvIHRoZSBwYXJhbWV0ZXIg
ZW50aXR5IGRlY2xhcmF0aW9uCiAgICAgKiBAZXhjZXB0aW9uIGphdmEubGFuZy5FeGNlcHRpb24K
ICAgICAqLwogICAgcHVibGljIGludCBhZGRFeHRlcm5hbFBFRGVjbChpbnQgbmFtZSwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwdWJsaWNJZCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBzeXN0ZW1JZCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAg
ICAgCiAgICAgICAgLy8gY3JlYXRlIGV4dGVybmFsIFBFIGRlY2wKICAgICAgICBFbGVtZW50IGV4
dGVybmFsUEVEZWNsID0gZkdyYW1tYXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJleHRlcm5hbFBF
RGVjbCIpOwogICAgICAgIGV4dGVybmFsUEVEZWNsLnNldEF0dHJpYnV0ZSgibmFtZSIsIGZTdHJp
bmdQb29sLnRvU3RyaW5nKG5hbWUpKTsKICAgICAgICBleHRlcm5hbFBFRGVjbC5zZXRBdHRyaWJ1
dGUoInB1YmxpY0lkIiwgZlN0cmluZ1Bvb2wudG9TdHJpbmcocHVibGljSWQpKTsKICAgICAgICBl
eHRlcm5hbFBFRGVjbC5zZXRBdHRyaWJ1dGUoInN5c3RlbUlkIiwgZlN0cmluZ1Bvb2wudG9TdHJp
bmcoc3lzdGVtSWQpKTsKICAgICAgICBmQ3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZXh0ZXJu
YWxQRURlY2wpOwoKICAgICAgICAvLyBSRVZJU0lUOiBXaGF0IGlzIG15IHJlc3BvbnNpYmlsaXR5
IGZvciBjcmVhdGluZyBhIGhhbmRsZT8KICAgICAgICBpbnQgcGVEZWNsSW5kZXggPSAtMTsKCiAg
ICAgICAgLy8gcmV0dXJuIGluZGV4CiAgICAgICAgcmV0dXJuIHBlRGVjbEluZGV4OwoKICAgIH0g
Ly8gYWRkRXh0ZXJuYWxQRURlY2woaW50LGludCxpbnQpOmludAoKICAgIC8qKgogICAgICogQWRk
IGEgZGVjbGFyYXRpb24gZm9yIGFuIGludGVybmFsIGVudGl0eQogICAgICoKICAgICAqIEBwYXJh
bSBuYW1lIFN0cmluZ1Bvb2wgaGFuZGxlIG9mIHRoZSBlbnRpdHkgbmFtZQogICAgICogQHBhcmFt
IHZhbHVlIFN0cmluZ1Bvb2wgaGFuZGxlIG9mIHRoZSBlbnRpdHkgdmFsdWUKICAgICAqIEByZXR1
cm4gaGFuZGxlIHRvIHRoZSBlbnRpdHkgZGVjbGFyYXRpb24KICAgICAqIEBleGNlcHRpb24gamF2
YS5sYW5nLkV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgaW50IGFkZEludGVybmFsRW50aXR5
RGVjbChpbnQgbmFtZSwgaW50IHZhbHVlKSB0aHJvd3MgRXhjZXB0aW9uIHsKCiAgICAgICAgLy8g
Y3JlYXRlIGludGVybmFsIGVudGl0eSBkZWNsCiAgICAgICAgRWxlbWVudCBpbnRlcm5hbEVudGl0
eURlY2wgPSBmR3JhbW1hckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImludGVybmFsRW50aXR5RGVj
bCIpOwogICAgICAgIGludGVybmFsRW50aXR5RGVjbC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBmU3Ry
aW5nUG9vbC50b1N0cmluZyhuYW1lKSk7CiAgICAgICAgaW50ZXJuYWxFbnRpdHlEZWNsLnNldEF0
dHJpYnV0ZSgidmFsdWUiLCBmU3RyaW5nUG9vbC50b1N0cmluZyh2YWx1ZSkpOwogICAgICAgIGZD
dXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChpbnRlcm5hbEVudGl0eURlY2wpOwogICAgICAgICAg
ICAKICAgICAgICAvLyBSRVZJU0lUOiBXaGF0IGlzIG15IHJlc3BvbnNpYmlsaXR5IGZvciBjcmVh
dGluZyBhIGhhbmRsZT8KICAgICAgICBpbnQgaW50ZXJuYWxFbnRpdHlEZWNsSW5kZXggPSAtMTsK
CiAgICAgICAgLy8gcmV0dXJuIGluZGV4CiAgICAgICAgcmV0dXJuIGludGVybmFsRW50aXR5RGVj
bEluZGV4OwoKICAgIH0gLy8gYWRkSW50ZXJuYWxFbnRpdHlEZWNsKGludCxpbnQpOmludAoKICAg
IC8qKgogICAgICogQWRkIGEgZGVjbGFyYXRpb24gZm9yIGFuIGVudGl0eQogICAgICoKICAgICAq
IEBwYXJhbSBuYW1lIFN0cmluZ1Bvb2wgaGFuZGxlIG9mIHRoZSBlbnRpdHkgbmFtZQogICAgICog
QHBhcmFtIHB1YmxpY0lkIFN0cmluZ1Bvb2wgaGFuZGxlIG9mIHRoZSBwdWJsaWNJZAogICAgICog
QHBhcmFtIHN5c3RlbUlkIFN0cmluZ1Bvb2wgaGFuZGxlIG9mIHRoZSBzeXN0ZW1JZAogICAgICog
QHJldHVybiBoYW5kbGUgdG8gdGhlIGVudGl0eSBkZWNsYXJhdGlvbgogICAgICogQGV4Y2VwdGlv
biBqYXZhLmxhbmcuRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBpbnQgYWRkRXh0ZXJuYWxF
bnRpdHlEZWNsKGludCBuYW1lLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBwdWJsaWNJZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c3lzdGVtSWQpIHRocm93cyBFeGNlcHRpb24gewoKICAgICAgICAvLyBjcmVhdGUgZXh0ZXJuYWwg
ZW50aXR5IGRlY2wKICAgICAgICBFbGVtZW50IGV4dGVybmFsRW50aXR5RGVjbCA9IGZHcmFtbWFy
RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZXh0ZXJuYWxFbnRpdHlEZWNsIik7CiAgICAgICAgZXh0
ZXJuYWxFbnRpdHlEZWNsLnNldEF0dHJpYnV0ZSgibmFtZSIsIGZTdHJpbmdQb29sLnRvU3RyaW5n
KG5hbWUpKTsKICAgICAgICBleHRlcm5hbEVudGl0eURlY2wuc2V0QXR0cmlidXRlKCJwdWJsaWNJ
ZCIsIGZTdHJpbmdQb29sLnRvU3RyaW5nKHB1YmxpY0lkKSk7CiAgICAgICAgZXh0ZXJuYWxFbnRp
dHlEZWNsLnNldEF0dHJpYnV0ZSgic3lzdGVtSWQiLCBmU3RyaW5nUG9vbC50b1N0cmluZyhzeXN0
ZW1JZCkpOwogICAgICAgIGZDdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChleHRlcm5hbEVudGl0
eURlY2wpOwogICAgICAgICAgICAKICAgICAgICAvLyBSRVZJU0lUOiBXaGF0IGlzIG15IHJlc3Bv
bnNpYmlsaXR5IGZvciBjcmVhdGluZyBhIGhhbmRsZT8KICAgICAgICBpbnQgZXh0ZXJuYWxFbnRp
dHlEZWNsSW5kZXggPSAtMTsKCiAgICAgICAgLy8gcmV0dXJuIGluZGV4CiAgICAgICAgcmV0dXJu
IGV4dGVybmFsRW50aXR5RGVjbEluZGV4OwoKICAgIH0gLy8gYWRkRXh0ZXJuYWxFbnRpdHlEZWNs
KGludCxpbnQsaW50KTppbnQKCiAgICAvKioKICAgICAqIEFkZCBhIGRlY2xhcmF0aW9uIGZvciBh
biB1bnBhcnNlZCBlbnRpdHkKICAgICAqCiAgICAgKiBAcGFyYW0gbmFtZSBTdHJpbmdQb29sIGhh
bmRsZSBvZiB0aGUgZW50aXR5IG5hbWUKICAgICAqIEBwYXJhbSBwdWJsaWNJZCBTdHJpbmdQb29s
IGhhbmRsZSBvZiB0aGUgcHVibGljSWQKICAgICAqIEBwYXJhbSBzeXN0ZW1JZCBTdHJpbmdQb29s
IGhhbmRsZSBvZiB0aGUgc3lzdGVtSWQKICAgICAqIEBwYXJhbSBub3RhdGlvbk5hbWUgU3RyaW5n
UG9vbCBoYW5kbGUgb2YgdGhlIG5vdGF0aW9uTmFtZQogICAgICogQHJldHVybiBoYW5kbGUgdG8g
dGhlIGVudGl0eSBkZWNsYXJhdGlvbgogICAgICogQGV4Y2VwdGlvbiBqYXZhLmxhbmcuRXhjZXB0
aW9uCiAgICAgKi8KICAgIHB1YmxpYyBpbnQgYWRkVW5wYXJzZWRFbnRpdHlEZWNsKGludCBuYW1l
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwdWJsaWNJZCwgaW50
IHN5c3RlbUlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBub3Rh
dGlvbk5hbWUpIHRocm93cyBFeGNlcHRpb24gewoKICAgICAgICAvLyBjcmVhdGUgZXh0ZXJuYWwg
ZW50aXR5IGRlY2wKICAgICAgICBFbGVtZW50IHVucGFyc2VkRW50aXR5RGVjbCA9IGZHcmFtbWFy
RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidW5wYXJzZWRFbnRpdHlEZWNsIik7CiAgICAgICAgdW5w
YXJzZWRFbnRpdHlEZWNsLnNldEF0dHJpYnV0ZSgibmFtZSIsIGZTdHJpbmdQb29sLnRvU3RyaW5n
KG5hbWUpKTsKICAgICAgICB1bnBhcnNlZEVudGl0eURlY2wuc2V0QXR0cmlidXRlKCJwdWJsaWNJ
ZCIsIGZTdHJpbmdQb29sLnRvU3RyaW5nKHB1YmxpY0lkKSk7CiAgICAgICAgdW5wYXJzZWRFbnRp
dHlEZWNsLnNldEF0dHJpYnV0ZSgic3lzdGVtSWQiLCBmU3RyaW5nUG9vbC50b1N0cmluZyhzeXN0
ZW1JZCkpOwogICAgICAgIHVucGFyc2VkRW50aXR5RGVjbC5zZXRBdHRyaWJ1dGUoIm5vdGF0aW9u
IiwgZlN0cmluZ1Bvb2wudG9TdHJpbmcobm90YXRpb25OYW1lKSk7CiAgICAgICAgZkN1cnJlbnRF
bGVtZW50LmFwcGVuZENoaWxkKHVucGFyc2VkRW50aXR5RGVjbCk7CiAgICAgICAgICAgIAogICAg
ICAgIC8vIFJFVklTSVQ6IFdoYXQgaXMgbXkgcmVzcG9uc2liaWxpdHkgZm9yIGNyZWF0aW5nIGEg
aGFuZGxlPwogICAgICAgIGludCB1bnBhcnNlZEVudGl0eURlY2xJbmRleCA9IC0xOwoKICAgICAg
ICAvLyByZXR1cm4gaW5kZXgKICAgICAgICByZXR1cm4gdW5wYXJzZWRFbnRpdHlEZWNsSW5kZXg7
CgogICAgfSAvLyBhZGRVbnBhcnNlZEVudGl0eURlY2woaW50LGludCxpbnQsaW50KTppbnQKCiAg
ICAvKioKICAgICAqIENhbGxlZCB3aGVuIHRoZSBzY2FubmVyIHN0YXJ0IHNjYW5uaW5nIGFuIGVu
dW1lcmF0aW9uCiAgICAgKiBAcmV0dXJuIFN0cmluZ1Bvb2wgaGFuZGxlIHRvIGEgc3RyaW5nIGxp
c3QgdGhhdCB3aWxsIGhvbGQgdGhlIGVudW1lcmF0aW9uIG5hbWVzCiAgICAgKiBAZXhjZXB0aW9u
IGphdmEubGFuZy5FeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGludCBzdGFydEVudW1lcmF0
aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIAogICAgICAgIC8vIGNyZWF0ZSBl
bnVtZXJhdGlvbgogICAgICAgIEVsZW1lbnQgZW51bWVyYXRpb24gPSBmR3JhbW1hckRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImVudW1lcmF0aW9uIik7CiAgICAgICAgZkN1cnJlbnRFbGVtZW50LmFw
cGVuZENoaWxkKGVudW1lcmF0aW9uKTsKICAgICAgICBmQ3VycmVudEVsZW1lbnQgPSBlbnVtZXJh
dGlvbjsKCiAgICAgICAgLy8gUkVWSVNJVDogV2hhdCBpcyBteSByZXNwb25zaWJpbGl0eSBmb3Ig
Y3JlYXRpbmcgYSBoYW5kbGU/CiAgICAgICAgLy9pbnQgZW51bUluZGV4ID0gLTE7ICAgIAogICAg
ICAgIGludCBlbnVtSW5kZXggPSBmU3RyaW5nUG9vbC5zdGFydFN0cmluZ0xpc3QoKTsKCiAgICAg
ICAgLy8gcmV0dXJuIGluZGV4CiAgICAgICAgcmV0dXJuIGVudW1JbmRleDsKCiAgICB9IC8vIHN0
YXJ0RW51bWVyYXRpb24oKTppbnQKCiAgICAvKioKICAgICAqIEFkZCBhIG5hbWUgdG8gYW4gZW51
bWVyYXRpb24KICAgICAqIEBwYXJhbSBlbnVtSW5kZXggU3RyaW5nUG9vbCBoYW5kbGUgdG8gdGhl
IHN0cmluZyBsaXN0IGZvciB0aGUgZW51bWVyYXRpb24KICAgICAqIEBwYXJhbSBlbGVtZW50VHlw
ZSBoYW5kbGUgdG8gdGhlIGVsZW1lbnQgdGhhdCBvd25zIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUg
ZW51bWVyYXRpb24KICAgICAqIEBwYXJhbSBhdHRyTmFtZSBTdHJpbmdQb29sIGhhbmRsZSB0byB0
aGUgbmFtZSBvZiB0aGUgYXR0cmlidXQgd2l0aCB0aGUgZW51bWVyYXRpb24KICAgICAqIEBwYXJh
bSBuYW1lSW5kZXggU3RyaW5nUG9vbCBoYW5kbGUgdG8gdGhlIG5hbWUgdG8gYmUgYWRkZWQgdG8g
dGhlIGVudW1lcmF0aW9uCiAgICAgKiBAcGFyYW0gaXNOb3RhdGlvblR5cGUgdHJ1ZSBpZiB0aGUg
ZW51bWVyYXRpb24gaXMgYW4gZW51bWVyYXRpb24gb2YgTk9UQVRJT04gbmFtZXMKICAgICAqIEBl
eGNlcHRpb24gamF2YS5sYW5nLkV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgdm9pZCBhZGRO
YW1lVG9FbnVtZXJhdGlvbihpbnQgZW51bUluZGV4LCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBlbGVtZW50VHlwZSwgaW50IGF0dHJOYW1lLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYW1lSW5kZXgsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc05vdGF0aW9uVHlwZSkgdGhyb3dzIEV4Y2Vw
dGlvbiB7CiAgICAgICAgCiAgICAgICAgLy8gY3JlYXRlIGVudW1lcmF0aW9uIGxpdGVyYWwKICAg
ICAgICBFbGVtZW50IGxpdGVyYWwgPSBmR3JhbW1hckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxp
dGVyYWwiKTsKICAgICAgICAvLyBSRVZJU0lUOiBIb3cgaXMgdGhpcyBsaXRlcmFsIChhbmQgaXRz
IHBhcmVudCBlbnVtZXJhdGlvbikKICAgICAgICAvLyAgICAgICAgICBhc3NvY2lhdGVkIHRvIGFu
IGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSBuYW1lPyBUaGlzCiAgICAgICAgLy8gICAgICAgICAgc2hv
dWxkIGJlIGRvbmUgYmV0dGVyLgogICAgICAgIGxpdGVyYWwuc2V0QXR0cmlidXRlKCJlbGVtZW50
IiwgZlN0cmluZ1Bvb2wudG9TdHJpbmcoZWxlbWVudFR5cGUpKTsKICAgICAgICBsaXRlcmFsLnNl
dEF0dHJpYnV0ZSgiYXR0cmlidXRlIiwgZlN0cmluZ1Bvb2wudG9TdHJpbmcoYXR0ck5hbWUpKTsK
ICAgICAgICBsaXRlcmFsLnNldEF0dHJpYnV0ZSgibmFtZSIsIGZTdHJpbmdQb29sLnRvU3RyaW5n
KG5hbWVJbmRleCkpOwogICAgICAgIGxpdGVyYWwuc2V0QXR0cmlidXRlKCJub3RhdGlvbiIsIGlz
Tm90YXRpb25UeXBlID8gInRydWUiIDogImZhbHNlIik7CiAgICAgICAgZkN1cnJlbnRFbGVtZW50
LmFwcGVuZENoaWxkKGxpdGVyYWwpOwoKICAgICAgICAvL2FkZCB0aGUgbmFtZSB0byB0aGUgc3Ry
aW5nTGlzdCAKICAgICAgICBmU3RyaW5nUG9vbC5hZGRTdHJpbmdUb0xpc3QoZW51bUluZGV4LCBu
YW1lSW5kZXgpOwoKICAgIH0gLy8gYWRkTmFtZVRvRW51bWVyYXRpb24oaW50LGludCxpbnQsaW50
LGJvb2xlYW4pCgogICAgLyoqCiAgICAgKiBGaW5pc2ggcHJvY2Vzc2luZyBhbiBlbnVtZXJhdGlv
bgogICAgICoKICAgICAqIEBwYXJhbSBlbnVtSW5kZXggaGFuZGxlIHRvIHRoZSBzdHJpbmcgbGlz
dCB3aGljaCBob2xkcyB0aGUgZW51bWVyYXRpb24gdG8gYmUgZmluc2hlZC4KICAgICAqIEBleGNl
cHRpb24gamF2YS5sYW5nLkV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgdm9pZCBlbmRFbnVt
ZXJhdGlvbihpbnQgZW51bUluZGV4KSB0aHJvd3MgRXhjZXB0aW9uIHsKCiAgICAgICAgLy8gZ2V0
IG91dCBvZiBlbnVtZXJhdGlvbgogICAgICAgIGZDdXJyZW50RWxlbWVudCA9IChFbGVtZW50KWZD
dXJyZW50RWxlbWVudC5nZXRQYXJlbnROb2RlKCk7CiAgICAgICAgCiAgICAgICAgLy9maW5pc2gg
dGhlIGVudW1lcmF0aW9uIHN0cmluZ2xpc3QgaW50IHRoZSBmU3RyaW5nUG9vbAogICAgICAgIGZT
dHJpbmdQb29sLmZpbmlzaFN0cmluZ0xpc3QoZW51bUluZGV4KTsKCiAgICB9IC8vIGVuZEVudW1l
cmF0aW9uKGludCkKCiAgICAvKioKICAgICAqIEFkZCBhIGRlY2xhcmF0aW9uIGZvciBhIG5vdGF0
aW9uCiAgICAgKgogICAgICogQHBhcmFtIG5vdGF0aW9uTmFtZQogICAgICogQHBhcmFtIHB1Ymxp
Y0lkCiAgICAgKiBAcGFyYW0gc3lzdGVtSWQKICAgICAqIEByZXR1cm4gaGFuZGxlIHRvIHRoZSBu
b3RhdGlvbiBkZWNsYXJhdGlvbgogICAgICogQGV4Y2VwdGlvbiBqYXZhLmxhbmcuRXhjZXB0aW9u
CiAgICAgKi8KICAgIHB1YmxpYyBpbnQgYWRkTm90YXRpb25EZWNsKGludCBub3RhdGlvbk5hbWUs
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHB1YmxpY0lkLCBpbnQgc3lzdGVt
SWQpIHRocm93cyBFeGNlcHRpb24gewoKICAgICAgICAvLyBjcmVhdGUgbm90YXRpb24gZGVjbAog
ICAgICAgIEVsZW1lbnQgbm90YXRpb25EZWNsID0gZkdyYW1tYXJEb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJub3RhdGlvbkRlY2wiKTsKICAgICAgICBub3RhdGlvbkRlY2wuc2V0QXR0cmlidXRlKCJu
YW1lIiwgZlN0cmluZ1Bvb2wudG9TdHJpbmcobm90YXRpb25OYW1lKSk7CiAgICAgICAgbm90YXRp
b25EZWNsLnNldEF0dHJpYnV0ZSgicHVibGljSWQiLCBmU3RyaW5nUG9vbC50b1N0cmluZyhwdWJs
aWNJZCkpOwogICAgICAgIG5vdGF0aW9uRGVjbC5zZXRBdHRyaWJ1dGUoInN5c3RlbUlkIiwgZlN0
cmluZ1Bvb2wudG9TdHJpbmcoc3lzdGVtSWQpKTsKICAgICAgICBmQ3VycmVudEVsZW1lbnQuYXBw
ZW5kQ2hpbGQobm90YXRpb25EZWNsKTsKCiAgICAgICAgLy8gUkVWSVNJVDogV2hhdCBpcyBteSBy
ZXNwb25zaWJpbGl0eSBmb3IgY3JlYXRpbmcgYSBoYW5kbGU/CiAgICAgICAgaW50IG5vdGF0aW9u
RGVjbEluZGV4ID0gLTE7CgogICAgICAgIC8vIHJldHVybiBpbmRleAogICAgICAgIHJldHVybiBu
b3RhdGlvbkRlY2xJbmRleDsKCiAgICB9IC8vIGFkZE5vdGF0aW9uZGVjbChpbnQsaW50LGludCk6
aW50CgogICAgLyoqCiAgICAgKiBDYWxsZWQgd2hlbiBhIGNvbW1lbnQgaGFzIGJlZW4gc2Nhbm5l
ZAogICAgICoKICAgICAqIEBwYXJhbSBkYXRhIFN0cmluZ1Bvb2wgaGFuZGxlIG9mIHRoZSBjb21t
ZW50IHRleHQKICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLkV4Y2VwdGlvbgogICAgICovCiAg
ICBwdWJsaWMgdm9pZCBjYWxsQ29tbWVudChpbnQgZGF0YSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAg
ICB9CgogICAgLyoqCiAgICAgKiBDYWxsZWQgd2hlbiBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24g
aGFzIGJlZW4gc2Nhbm5lZAogICAgICogQHBhcmFtIHBpVGFyZ2V0IFN0cmluZ1Bvb2wgaGFuZGxl
IG9mIHRoZSBQSSB0YXJnZXQKICAgICAqIEBwYXJhbSBwaURhdGEgU3RyaW5nUG9vbCBoYW5kbGUg
b2YgdGhlIFBJIGRhdGEKICAgICAqIEBleGNlcHRpb24gamF2YS5sYW5nLkV4Y2VwdGlvbgogICAg
ICovCiAgICBwdWJsaWMgdm9pZCBjYWxsUHJvY2Vzc2luZ0luc3RydWN0aW9uKGludCBwaVRhcmdl
dCwgaW50IHBpRGF0YSkgCiAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CgogICAgICAgIC8vIGNy
ZWF0ZSBwaQogICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBwaSA9IAogICAgICAgICAgICBm
R3JhbW1hckRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihmU3RyaW5nUG9vbC50
b1N0cmluZyhwaVRhcmdldCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZTdHJpbmdQb29sLnRvU3RyaW5nKHBpRGF0YSkpOwogICAgICAg
IGZDdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChwaSk7CgogICAgfSAvLyBjYWxsUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKGludCxpbnQpCgogICAgLy8gZGVwcmVjYXRlZCAtLSByZW1vdmVkIGZyb20g
RE9NIExldmVsIDIKCiAgICAvKioKICAgICAqIFN1cHBvcnRzIERPTSBMZXZlbCAyIGludGVybmFs
U3Vic2V0IGFkZGl0aW9ucy4KICAgICAqIENhbGxlZCB3aGVuIHRoZSBpbnRlcm5hbCBzdWJzZXQg
aXMgY29tcGxldGVseSBzY2FubmVkLgogICAgICovCiAgICBwdWJsaWMgdm9pZCBpbnRlcm5hbFN1
YnNldChpbnQgaW50ZXJuYWxTdWJzZXQpIHRocm93cyBFeGNlcHRpb24gewogICAgfQoKICAgIHBy
b3RlY3RlZCBib29sZWFuIGlzRFREKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAg
IC8vCiAgICAvLyBQcml2YXRlIG1ldGhvZHMKICAgIC8vCgogICAgLy8gZW5zdXJlIGNhcGFjaXR5
CgogICAgLyoqIEVuc3VyZXMgc3RvcmFnZSBmb3IgZWxlbWVudCBkZWNsYXJhdGlvbiBtYXBwaW5n
cy4gKi8KICAgIHByaXZhdGUgdm9pZCBlbnN1cmVFbGVtZW50RGVjbENhcGFjaXR5KGludCBjaHVu
aykgewogICAgICAgIGlmIChjaHVuayA+PSBmRWxlbWVudERlY2xNYXAubGVuZ3RoKSB7CiAgICAg
ICAgICAgIGZFbGVtZW50RGVjbE1hcCA9IHJlc2l6ZShmRWxlbWVudERlY2xNYXAsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkVsZW1lbnREZWNsTWFwLmxlbmd0aCAqIDIp
OwogICAgICAgICAgICBmRWxlbWVudERlY2xJc0V4dGVybmFsID0gcmVzaXplKGZFbGVtZW50RGVj
bElzRXh0ZXJuYWwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkVsZW1l
bnREZWNsSXNFeHRlcm5hbC5sZW5ndGggKiAyKTsKICAgICAgICB9IGVsc2UgaWYgKGZFbGVtZW50
RGVjbE1hcFtjaHVua10gIT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQog
ICAgICAgIGZFbGVtZW50RGVjbE1hcFtjaHVua10gPSBuZXcgaW50W0NIVU5LX1NJWkVdOwogICAg
ICAgIGZFbGVtZW50RGVjbElzRXh0ZXJuYWxbY2h1bmtdID0gbmV3IGludFtDSFVOS19TSVpFXTsK
ICAgIH0KCiAgICAvKiogRW5zdXJlcyBzdG9yYWdlIGZvciBhdHRyaWJ1dGUgZGVjbGFyYXRpb24g
bWFwcGluZ3MuICovCiAgICBwcml2YXRlIHZvaWQgZW5zdXJlQXR0cmlidXRlRGVjbENhcGFjaXR5
KGludCBjaHVuaykgewogICAgICAgIGlmIChjaHVuayA+PSBmQXR0cmlidXRlRGVjbE1hcC5sZW5n
dGgpIHsKICAgICAgICAgICAgZkF0dHJpYnV0ZURlY2xNYXAgPSByZXNpemUoZkF0dHJpYnV0ZURl
Y2xNYXAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmQXR0cmlidXRl
RGVjbE1hcC5sZW5ndGggKiAyKTsKICAgICAgICAgICAgZkF0dHJpYnV0ZURlY2xJc0V4dGVybmFs
ID0gcmVzaXplKGZBdHRyaWJ1dGVEZWNsSXNFeHRlcm5hbCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZBdHRyaWJ1dGVEZWNsSXNFeHRlcm5hbC5sZW5ndGggKiAyKTsK
ICAgICAgICB9IGVsc2UgaWYgKGZBdHRyaWJ1dGVEZWNsTWFwW2NodW5rXSAhPSBudWxsKSB7CiAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZkF0dHJpYnV0ZURlY2xNYXBbY2h1
bmtdID0gbmV3IGludFtDSFVOS19TSVpFXTsKICAgICAgICBmQXR0cmlidXRlRGVjbElzRXh0ZXJu
YWxbY2h1bmtdID0gbmV3IGludFtDSFVOS19TSVpFXTsKICAgIH0KCiAgICAvKiogRW5zdXJlcyBz
dG9yYWdlIGZvciBjb250ZW50IHNwZWMgbWFwcGluZ3MuICovCiAgICBwcml2YXRlIHZvaWQgZW5z
dXJlQ29udGVudFNwZWNDYXBhY2l0eShpbnQgY2h1bmspIHsKICAgICAgICBpZiAoY2h1bmsgPj0g
ZkNvbnRlbnRTcGVjTWFwLmxlbmd0aCkgewogICAgICAgICAgICBmQ29udGVudFNwZWNNYXAgPSBy
ZXNpemUoZkNvbnRlbnRTcGVjTWFwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZDb250ZW50U3BlY01hcC5sZW5ndGggKiAyKTsKICAgICAgICB9IGVsc2UgaWYgKGZDb250
ZW50U3BlY01hcFtjaHVua10gIT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAg
fQogICAgICAgIGZDb250ZW50U3BlY01hcFtjaHVua10gPSBuZXcgaW50W0NIVU5LX1NJWkVdOwog
ICAgfQoKICAgIC8vIHJlc2l6ZSBpbml0aWFsIGNodW5rCgogICAgLyoqIFJlc2l6ZXMgY2h1bmtl
ZCBpbnRlZ2VyIGFycmF5cy4gKi8KICAgIHByaXZhdGUgaW50W11bXSByZXNpemUoaW50IGFycmF5
W11bXSwgaW50IG5ld3NpemUpIHsKICAgICAgICBpbnQgbmV3YXJyYXlbXVtdID0gbmV3IGludFtu
ZXdzaXplXVtdOwogICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYXJyYXksIDAsIG5ld2FycmF5LCAw
LCBhcnJheS5sZW5ndGgpOwogICAgICAgIHJldHVybiBuZXdhcnJheTsKICAgIH0KCn0gLy8gY2xh
c3MgRFRER3JhbW1hcgo=


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2003-01-01 18:26 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-03-23  9:47 java/5487: arm-linux-gcj cross-compiler generates bad assembler-code rearnsha
  -- strict thread matches above, loose matches on Subject: below --
2003-01-01 18:26 neroden
2002-03-26  5:46 Richard Earnshaw
2002-03-25 12:36 Tom Tromey
2002-03-25  3:46 Richard Earnshaw
2002-03-23 19:36 Tom Tromey
2002-01-25  1:46 jsantala

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).