8199384: [TESTBUG] Open source VM testbase MLVM tests
authoriignatyev
Thu, 17 May 2018 00:23:28 -0700
changeset 50156 6d6fe9416864
parent 50155 3595bd343b65
child 50157 bd198a98f3c5
8199384: [TESTBUG] Open source VM testbase MLVM tests Reviewed-by: erikj, mseledtsov, vlivanov
make/test/JtregNativeHotspot.gmk
test/hotspot/jtreg/ProblemList-graal.txt
test/hotspot/jtreg/ProblemList.txt
test/hotspot/jtreg/TEST.groups
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/Injector.c
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/Injector.h
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/JVMTITools.c
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/JVMTITools.h
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_common/agent_common.c
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_common/agent_common.h
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_tools.c
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_FollowRefObjects.c
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_FollowRefObjects.h
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_tools.c
test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_tools.h
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/castToGrandparent/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/castToParent/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/classNameInStackTrace/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/finalSuperclass/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/findByName/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/invalidSuperclass/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/isGarbageCollected/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/uniqueClassAndObject/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/AnonkTestee01.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/AnonkTestee02.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/ReplaceClassParentTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/StressClassLoadingTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/byteMutation/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/byteMutation/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/heap/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/heap/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/parallelLoad/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/parallelLoad/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/randomBytecodes/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/randomBytecodes/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenCPFullOfMH.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenCPFullOfMT.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenFullCP.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyCorrectBootstrap.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyIncorrectBootstrap.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyOneCPX.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/HandleType.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/correctBootstrap/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/incorrectBootstrap/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/manyIndyOneCPX/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/manyIndyOneCPX/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mh/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mh/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mt/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mt/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.jmpp
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/thisAsArgument/INDIFY_Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/thisAsArgument/Test.java.jdk8
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/verifyStackTrace/INDIFY_Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/verifyStackTrace/Test.java.jdk8
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/newclass/INDIFY_Dummy0.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineClass.c
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineClass.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/libIndyRedefineClass.c
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/INDIFY_Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/libstepBreakPopReturn.c
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/stepBreakPopReturn.c
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/CallSiteDekkerActor.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/INDIFY_RelinkCallSiteFreqTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/INDIFY_RelinkCallSiteTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/INDIFY_Testee.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.jmpp
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/Test.java.jdk8
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/Actor.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/Actor.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/java/throwException/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/Argument.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/Arguments.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MHTransformationGen.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MHUtils.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MethodParameterValueProvider.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/PrimitiveTypeConverter.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/PrimitiveTypeConverter.jmpp
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomArgumentGen.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomArgumentsGen.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomMTGen.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomTypeGen.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomValueGen.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/SimpleOpMethodHandles.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/SimpleUnitTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/TestTypes.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArrayEnvelopeTFPair.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArrayGetElemTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArraySetElemTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHBasicUnaryTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHBindTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCall.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCastTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCollectSpreadBaseTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCollectSpreadTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHConstantTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHConvertTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHDropTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHDropTF2.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHEnvelopeArgTFPair.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHExplicitCastTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFilterRetValTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFilterTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFoldTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHIdentityTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHInsertOrDropTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHInsertTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHMacroTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHNaryTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHNullaryTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHOutboundCallTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHOutboundVirtualCallTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHPermuteTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHPrimitiveTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHSamTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHTFPair.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHThrowCatchTFPair.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHUnaryTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHVarargsCollectSpreadTF.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/inlineMHTarget/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/inlineMHTarget/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/sequences/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/sequences/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMH/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMH/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMHConsts/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMHConsts/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/java/sequences/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/java/sequences/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/libnativeAndMH.c
test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/nativeAndMH.c
test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.jmpp
test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TestDescription.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/INDIFY_Test.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/TEST.properties
test/hotspot/jtreg/vmTestbase/vm/mlvm/patches/java.base/java/lang/invoke/NewInvokeSpecialCallSite.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/patches/java.base/jdk/internal/org/objectweb/asm/ClassWriterExt.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ClassfileGenerator.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ClassfileGeneratorTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/CustomClassLoaders.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/DekkerTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/Env.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ExceptionsOptionObjectFactory.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/IgnoreUnknownArgumentParser.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/IndifiedClassesBuilder.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmOOMTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTestExecutor.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MultiThreadedTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/Stratum.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/StratumClassesBuilder.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/TestSequence.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/WhiteBoxHelper.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/ArgumentHandler.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/BreakpointInfo.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/IndyDebuggee.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/JDIBreakpointTest.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/MHDebuggee.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/Debuggee.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/INDIFY_SDE_DebuggeeBase.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/SDE_MHDebuggeeBase.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/StratumInfo.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/StratumUtils.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.c
test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.h
test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/Indify.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/LoadClass.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/StratumAP.java
test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/StratumAPTreeVisitor.java
--- a/make/test/JtregNativeHotspot.gmk	Wed May 16 16:43:57 2018 -0700
+++ b/make/test/JtregNativeHotspot.gmk	Thu May 17 00:23:28 2018 -0700
@@ -78,6 +78,17 @@
     -I$(VM_TESTBASE_DIR)/nsk/share/native \
     -I$(VM_TESTBASE_DIR)/nsk/share/locks
 
+MLVM_JVMTI_INCLUDES := \
+    -I$(VM_TESTBASE_DIR)/nsk/share/native \
+    -I$(VM_TESTBASE_DIR)/nsk/share/jni \
+    -I$(VM_TESTBASE_DIR)/nsk/share/jvmti \
+    -I$(VM_TESTBASE_DIR)/nsk/share/jvmti/agent_common \
+    -I$(VM_TESTBASE_DIR)/vm/mlvm/share
+
+MLVM_STRESS_INCLUDES := \
+    -I$(VM_TESTBASE_DIR)/nsk/share/native \
+    -I$(VM_TESTBASE_DIR)/nsk/share/jni
+
 BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libProcessUtils := $(VM_SHARE_INCLUDES)
 
 BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libThreadController := $(NSK_MONITORING_INCLUDES)
@@ -95,6 +106,11 @@
 BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libLockingThread := $(NSK_SHARE_LOCKS_INCLUDES)
 BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libJNIMonitorLocker := $(NSK_SHARE_LOCKS_INCLUDES)
 
+BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libstepBreakPopReturn := $(MLVM_JVMTI_INCLUDES)
+BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libIndyRedefineClass := $(MLVM_JVMTI_INCLUDES)
+
+BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libnativeAndMH := $(MLVM_STRESS_INCLUDES)
+
 ################################################################################
 
 # Platform specific setup
@@ -105,6 +121,8 @@
 ifeq ($(OPENJDK_TARGET_OS), linux)
     BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rw := -z noexecstack
     BUILD_HOTSPOT_JTREG_LIBRARIES_LDFLAGS_libtest-rwx := -z execstack
+    BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libstepBreakPopReturn := -lpthread
+    BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libIndyRedefineClass := -lpthread
     BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exeinvoke := -ljvm -lpthread
     BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exestack-gap := -ljvm -lpthread
     BUILD_TEST_exeinvoke_exeinvoke.c_OPTIMIZATION := NONE
--- a/test/hotspot/jtreg/ProblemList-graal.txt	Wed May 16 16:43:57 2018 -0700
+++ b/test/hotspot/jtreg/ProblemList-graal.txt	Thu May 17 00:23:28 2018 -0700
@@ -135,3 +135,6 @@
 vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses028/TestDescription.java   8195627   generic-all
 vmTestbase/nsk/jdi/VirtualMachine/redefineClasses/redefineclasses030/TestDescription.java   8195627   generic-all
 
+vmTestbase/vm/mlvm/anonloader/stress/oome/heap/Test.java         8186299   generic-all
+vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/Test.java    8186299   generic-all
+
--- a/test/hotspot/jtreg/ProblemList.txt	Wed May 16 16:43:57 2018 -0700
+++ b/test/hotspot/jtreg/ProblemList.txt	Thu May 17 00:23:28 2018 -0700
@@ -123,6 +123,25 @@
 vmTestbase/nsk/jdi/EventQueue/remove_l/remove_l005/TestDescription.java 8068225 generic-all
 vmTestbase/nsk/jdi/stress/ClassPrepareEvents/ClassPrepareEvents001/ClassPrepareEvents001.java 6426321 generic-all
 
+vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/Test.java 8199578 generic-all
+vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/Test.java 8199578 generic-all
+vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/TestDescription.java 8013267 generic-all
+vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/Test.java 8079664 generic-all
+vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/Test.java 8079664 generic-all
+vmTestbase/vm/mlvm/meth/func/java/throwException/Test.java 8079714 generic-all
+vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/Test.java 8079713,8079714 generic-all
+vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/Test.java 8079642,8079714 generic-all
+vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/Test.java 8079714 generic-all
+vmTestbase/vm/mlvm/meth/stress/compiler/sequences/Test.java 8079714 generic-all
+vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/Test.java 8079714 generic-all
+vmTestbase/vm/mlvm/meth/stress/java/sequences/Test.java 8079714 generic-all
+vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/Test.java 8079714 generic-all
+vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TestDescription.java 8055376 generic-all
+vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/INDIFY_Test.java 8079650 generic-all
+vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TestDescription.java 8013267 generic-all
+vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TestDescription.java 8013267 generic-all
+vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TestDescription.java 8013267 generic-all
+
 vmTestbase/heapdump/JMapHeapCore/TestDescription.java 8023376,8001227,8051445 generic-all
 vmTestbase/heapdump/JMapMetaspaceCore/TestDescription.java 8023376,8001227,8051445 generic-all
 
--- a/test/hotspot/jtreg/TEST.groups	Wed May 16 16:43:57 2018 -0700
+++ b/test/hotspot/jtreg/TEST.groups	Thu May 17 00:23:28 2018 -0700
@@ -1157,6 +1157,9 @@
   vmTestbase/nsk/jdi/StackFrame/getArgumentValues/getArgumentValues002/getArgumentValues002.java \
   vmTestbase/nsk/jdi/StackFrame/getArgumentValues/getArgumentValues003/getArgumentValues003.java
 
+# JSR292 tests (invokedynamic AKA Multi-Language VM AKA Da Vinci Machine)
+vmTestbase_vm_mlvm = \
+  vmTestbase/vm/mlvm
 # Heap dump tests
 vmTestbase_vm_heapdump = \
   vmTestbase/heapdump/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/Injector.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,1207 @@
+/*
+ * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "jni_tools.h"
+#include "jvmti_tools.h"
+#include "Injector.h"
+
+/* ========================================================================== */
+
+/* Opcode Lengths */
+static const u1 opcLengths[] = {
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 3, /*   0- 19 */
+    3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*  20- 39 */
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, /*  40- 59 */
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*  60- 79 */
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*  80- 99 */
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 100-119 */
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, /* 120-139 */
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, /* 140-159 */
+    3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, /* 160-179 */
+    3, 3, 3, 3, 3, 5, 5, 3, 2, 3, 1, 1, 3, 3, 1, 1, 0, 4, 3, 3, /* 180-199 */
+    5, 5, 1                                                     /* 200-    */
+};
+
+static const int GROWTH_FACTOR = 2;
+static const char* codeAttributeName = "Code";
+static const char* lineNumberAttributeName = "LineNumberTable";
+static const char* localVarAttributeName = "LocalVariableTable";
+static const char* localVarTypeAttributeName = "LocalVariableTypeTable";
+static const char* stackMapAttributeName= "StackMapTable";
+
+static u2 codeAttributeIndex;
+static u2 lineNumberAttributeIndex;
+static u2 localVarAttributeIndex;
+static u2 localVarTypeAttributeIndex;
+static u2 stackMapAttributeIndex;
+
+static const u1 SAME_BEGIN = 0;
+static const u1 SAME_END = 63;
+
+static const u1 SAME_LOCALS_1_STACK_ITEM_BEGIN = 64;
+static const u1 SAME_LOCALS_1_STACK_ITEM_END = 127;
+
+//Tags in the range [128-246] are reserved for future use.
+
+static const u1 SAME_LOCALS_1_STACK_ITEM_EXTENDED = 247;
+
+static const u1 CHOP_BEGIN = 248;
+static const u1 CHOP_END = 250;
+
+static const u1 SAME_FRAME_EXTENDED = 251;
+
+static const u1 APPEND_BEGIN = 252;
+static const u1 APPEND_END = 254;
+
+static const u1 FULL_FRAME = 255;
+
+static const u1 ITEM_Object = 7;
+static const u1 ITEM_Uninitialized = 8;
+
+static u2 stackFrameOffset = 0;
+
+static int mode;
+static const u1* orig;
+static u1* gen;
+
+static u1* inputPos;
+static const u1* endPos;
+static u1* genPos;
+static u1* markPos;
+
+static char** constantPool;
+static u2 constantPoolSize;
+static u2 constantPoolCount;
+
+static u1 callBytes[] = { opc_invokestatic, 0, 0 };
+static u1 allocBytes[] = { opc_invokestatic, 0, 0 };
+static u1 zeroBytes[] = { 0, 0, 0 };
+
+static u4 codeLength;
+static u4* map;
+static jbyte* widening;
+
+/* ========================================================================== */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    static u1 get_u1() {
+        return *inputPos++;
+    }
+
+    static u2 get_u2() {
+        u1* p = inputPos;
+        inputPos += 2;
+        return (u2)p[1] | ((u2)p[0]<<8);
+    }
+
+    static u4 get_u4() {
+        u1* p = inputPos;
+        inputPos += 4;
+        return (u4)p[3] | ((u4)p[2]<<8) | ((u4)p[1]<<16) | ((u4)p[0]<<24);
+    }
+
+    static void put_u1(u1 v) {
+        *genPos++ = v;
+    }
+
+    static void put_u2(u2 v) {
+        *genPos++ = (u1)(v>>8);
+        *genPos++ = (u1)(v & 0xFF);
+    }
+
+    static void put_u4(u4 v) {
+        *genPos++ = (u1)(v>>24);
+        *genPos++ = (u1)(v>>16);
+        *genPos++ = (u1)(v>>8);
+        *genPos++ = (u1)(v & 0xFF);
+    }
+
+    static void set_u4(u1* pos, u4 v) {
+        *pos++ = (u1)(v>>24);
+        *pos++ = (u1)(v>>16);
+        *pos++ = (u1)(v>>8);
+        *pos++ = (u1)(v & 0xFF);
+    }
+
+    static u1 copy_u1() {
+        u1 v = get_u1();
+        put_u1(v);
+        return v;
+    }
+
+    static u2 copy_u2() {
+        u2 v = get_u2();
+        put_u2(v);
+        return v;
+    }
+
+    static u4 copy_u4() {
+        u4 v = get_u4();
+        put_u4(v);
+        return v;
+    }
+
+    static void copy(int count) {
+        memcpy(genPos, inputPos, count);
+        inputPos += count;
+        genPos += count;
+    }
+
+    static void skip(int count) {
+        inputPos += count;
+    }
+
+    static void get(u1* bytes, int count) {
+        memcpy(bytes, inputPos, count);
+        inputPos += count;
+    }
+
+    static void put(u1* bytes, int count) {
+        memcpy(genPos, bytes, count);
+        genPos += count;
+    }
+
+    static void markLocalPositionStart() {
+        markPos = inputPos;
+    }
+
+    static u4 localPosition() {
+        return (u4) (inputPos - markPos);
+    }
+
+    void recallPosition() {
+        inputPos = markPos;
+    }
+
+    static u4 generatedPosition() {
+        return (u4) (genPos - gen);
+    }
+
+    static void randomAccessWriteU2(int pos, u2 v) {
+        gen[pos]   = (u1)(v>>8);
+        gen[pos+1] = (u1)(v & 0xFF);
+    }
+
+    static void randomAccessWriteU4(int pos, u4 v) {
+        gen[pos]   = (u1)(v>>24);
+        gen[pos+1] = (u1)(v>>16);
+        gen[pos+2] = (u1)(v>>8);
+        gen[pos+3] = (u1)(v & 0xFF);
+    }
+
+    static int copyConstantPool(u2 constantPoolCount) {
+        u2 i;
+        u2 len;
+        char* utf8;
+
+        constantPoolSize = constantPoolCount;
+
+        NSK_DISPLAY1("copying ConstantPool: %d\n", constantPoolSize);
+        constantPool = (char**) malloc(constantPoolSize * sizeof(char*));
+        if (!NSK_VERIFY(constantPool != NULL)) {
+            NSK_COMPLAIN0("out of memory\n");
+            return NSK_FALSE;
+        }
+
+        memset(constantPool, 0, constantPoolSize * sizeof(char*));
+
+        codeAttributeIndex = 0;
+        lineNumberAttributeIndex = 0;
+        localVarAttributeIndex = 0;
+        localVarTypeAttributeIndex = 0;
+        stackMapAttributeIndex = 0;
+
+        for (i = 1; i < constantPoolSize; i++) {
+            u1 tag = copy_u1();
+            switch (tag) {
+            case CONSTANT_Class:
+            case CONSTANT_String:
+            case CONSTANT_MethodType:
+                copy(2);
+                break;
+            case CONSTANT_MethodHandle:
+                copy(3);
+                break;
+            case CONSTANT_Fieldref:
+            case CONSTANT_Methodref:
+            case CONSTANT_InterfaceMethodref:
+            case CONSTANT_Integer:
+            case CONSTANT_Float:
+            case CONSTANT_NameAndType:
+            case CONSTANT_InvokeDynamic:
+                copy(4);
+                break;
+            case CONSTANT_Long:
+            case CONSTANT_Double:
+                copy(8);
+                i++; /* takes two CP entries */
+                break;
+            case CONSTANT_Utf8:
+                len = copy_u2();
+                utf8 = (char*) malloc(len + 1);
+                if (!NSK_VERIFY(utf8 != NULL)) {
+                    NSK_COMPLAIN0("out of memory\n");
+                    return NSK_FALSE;
+                }
+                get((u1*) utf8, len);
+                utf8[len] = 0;
+                constantPool[i] = utf8;
+                if (strcmp(utf8, codeAttributeName) == 0) {
+                    codeAttributeIndex = i;
+                } else if (strcmp(utf8, lineNumberAttributeName) == 0) {
+                    lineNumberAttributeIndex = i;
+                } else if (strcmp(utf8, localVarAttributeName) == 0) {
+                    localVarAttributeIndex = i;
+                } else if (strcmp(utf8, localVarTypeAttributeName) == 0) {
+                    localVarTypeAttributeIndex = i;
+                } else if (strcmp(utf8, stackMapAttributeName) == 0) {
+                    stackMapAttributeIndex = i;
+                }
+                put((u1*) utf8, len);
+                break;
+            default:
+                NSK_COMPLAIN2("%d unexpected constant pool tag: %d\n", i, tag);
+                return NSK_FALSE;
+            }
+        }
+
+        return NSK_TRUE;
+    }
+
+    static void freeConstantPool() {
+        u2 i;
+
+        for (i = 1; i < constantPoolSize; i++) {
+            if (constantPool[i] != NULL) {
+                free(constantPool[i]);
+            }
+        }
+
+        free(constantPool);
+    }
+
+    /* ========================================================================== */
+
+    /* Copy the exception table for this method code */
+    static void copyExceptionTable() {
+        u2 tableLength;
+        u2 i;
+
+        tableLength = copy_u2();
+        NSK_DISPLAY1("ExceptionTable length: %d\n", tableLength);
+        for (i = tableLength; i > 0; i--) {
+            put_u2((u2) map[get_u2()]); /* start_pc */
+            put_u2((u2) map[get_u2()]); /* end_pc */
+            put_u2((u2) map[get_u2()]); /* handler_pc */
+            copy(2);                    /* catch_type */
+        }
+    }
+
+    /* Copy the line number table for this method code */
+    static void copyLineNumberAttr() {
+        u2 tableLength;
+        u2 i;
+
+        copy(4); /* attr len */
+
+        tableLength = copy_u2();
+
+        NSK_DISPLAY1("LineNumberTable length: %d\n", tableLength);
+        for (i = tableLength; i > 0; i--) {
+            put_u2((u2) map[get_u2()]); /* start_pc */
+            copy(2);                    /* line_number */
+        }
+    }
+
+    /* Copy the local variable table for this method code */
+    static void copyLocalVarAttr() {
+        u2 tableLength;
+        u2 startPC;
+        u2 i;
+
+        copy(4); /* attr len */
+
+        tableLength = copy_u2();
+
+        NSK_DISPLAY1("LocalVariableTable length: %d\n", tableLength);
+        for (i = tableLength; i > 0; i--) {
+            startPC = get_u2();
+            put_u2((u2) map[startPC]);  /* start_pc */
+            put_u2((u2) (map[startPC + get_u2()] - map[startPC])); /* length */
+            copy(6); /* name_index, descriptor_index, index */
+        }
+    }
+
+    /* Copy the local variable type table for this method code */
+    static void copyLocalVarTypeAttr() {
+        u2 tableLength;
+        u2 startPC;
+        u2 i;
+
+        copy(4); /* attr len */
+
+        tableLength = copy_u2();
+
+        NSK_DISPLAY1("LocalVariableTypeTable length: %d\n", tableLength);
+        for (i = tableLength; i > 0; i--) {
+            startPC = get_u2();
+            put_u2((u2) map[startPC]);  /* start_pc */
+            put_u2((u2) (map[startPC + get_u2()] - map[startPC])); /* length */
+            copy(6); /* name_index, signature_index, index */
+        }
+    }
+
+    static u2 calculateOffsetDelta(u2 frameNumber, u2 frameOffsetDelta) {
+        u2 oldOffset;
+        u2 newOffset;
+        if(frameNumber == 0) {
+            stackFrameOffset = frameOffsetDelta;
+            return (u2) map[stackFrameOffset];
+        } else {
+            oldOffset = (u2) map[stackFrameOffset];
+            stackFrameOffset = stackFrameOffset + frameOffsetDelta + 1;
+            newOffset = (u2) map[stackFrameOffset - 1];
+            return newOffset - oldOffset;
+        }
+    }
+
+    static void copyVerificationTypeInfo(u2 count) {
+        u2 i;
+        u2 offset;
+        u1 tag;
+        for(i=0; i<count; i++) {
+            tag = get_u1();
+            put_u1(tag);
+            if(tag == ITEM_Object) {
+                copy_u2();
+            } else if (tag == ITEM_Uninitialized) {
+                copy_u2();
+                offset = get_u2();
+                put_u2((u2)map[offset]);
+            }
+        }
+    }
+
+    static void copyStackMapAttr() {
+        u2 number_of_entries;
+        u2 i;
+        u4 len;
+        unsigned int frame_type;
+        u2 frameOffsetDelta;
+        u2 number_of_stack_items;
+        u2 number_of_locals;
+        u1* lenPtr = genPos;
+
+        len=copy_u4(); /* attr len */
+
+        number_of_entries = copy_u2();
+
+
+
+        for(i=0; i<number_of_entries; i++) {
+            frame_type = get_u1();
+
+            if((frame_type >= SAME_BEGIN) && (frame_type <= SAME_END)) {
+                // same_frame {
+                //        u1 frame_type = SAME; /* 0-63 */
+                // }
+
+                put_u1(SAME_FRAME_EXTENDED);
+                put_u2(calculateOffsetDelta(i, (u2) frame_type));
+
+            } else if((frame_type >= SAME_LOCALS_1_STACK_ITEM_BEGIN) && (frame_type<=SAME_LOCALS_1_STACK_ITEM_END)) {
+                // same_locals_1_stack_item_frame {
+                //         u1 frame_type = SAME_LOCALS_1_STACK_ITEM;/* 64-127 */
+                //         verification_type_info stack[1];
+                // }
+
+                put_u1(SAME_LOCALS_1_STACK_ITEM_EXTENDED);
+                put_u2(calculateOffsetDelta(i, (u2) (frame_type-64)));
+                copyVerificationTypeInfo(1);
+
+                // Tags in the range [128-246] are reserved for future use.
+            } else if(frame_type == SAME_LOCALS_1_STACK_ITEM_EXTENDED) {
+                // same_locals_1_stack_item_frame_extended {
+                //     u1 frame_type = SAME_LOCALS_1_STACK_ITEM_EXTENDED; /* 247 */
+                //     u2 offset_delta;
+                //     verification_type_info stack[1];
+                // }
+
+                put_u1(SAME_LOCALS_1_STACK_ITEM_EXTENDED);
+                frameOffsetDelta = get_u2();
+                put_u2(calculateOffsetDelta(i, frameOffsetDelta));
+                copyVerificationTypeInfo(1);
+
+            } else if((frame_type >= CHOP_BEGIN) && (frame_type <= CHOP_END)) {
+                // chop_frame {
+                //         u1 frame_type = CHOP; /* 248-250 */
+                //         u2 offset_delta;
+                // }
+                put_u1((u1)frame_type);
+                frameOffsetDelta = get_u2();
+                put_u2(calculateOffsetDelta(i, frameOffsetDelta));
+
+            } else if(frame_type == SAME_FRAME_EXTENDED) {
+                // same_frame_extended {
+                //     u1 frame_type = SAME_FRAME_EXTENDED; /* 251 */
+                //     u2 offset_delta;
+                // }
+
+                put_u1(SAME_FRAME_EXTENDED);
+                frameOffsetDelta = get_u2();
+                put_u2(calculateOffsetDelta(i, frameOffsetDelta));
+
+            } else if((frame_type >= APPEND_BEGIN) && (frame_type <= APPEND_END)) {
+                // append_frame {
+                //     u1 frame_type = APPEND; /* 252-254 */
+                //     u2 offset_delta;
+                //     verification_type_info locals[frame_type - 251];
+                // }
+
+                put_u1((u1)frame_type);
+                frameOffsetDelta = get_u2();
+                put_u2(calculateOffsetDelta(i, frameOffsetDelta));
+                copyVerificationTypeInfo((u1)(frame_type - 251));
+
+            } else if(frame_type == FULL_FRAME) {
+                // sfull_frame {
+                //    u1 frame_type = FULL_FRAME; /* 255 */
+                //    u2 offset_delta;
+                //    u2 number_of_locals;
+                //    verification_type_info locals[number_of_locals];
+                //    u2 number_of_stack_items;
+                //    verification_type_info stack[number_of_stack_items];
+                //}
+
+                put_u1(FULL_FRAME);
+                frameOffsetDelta = get_u2();
+                put_u2(calculateOffsetDelta(i, frameOffsetDelta));
+                number_of_locals = copy_u2();
+                copyVerificationTypeInfo(number_of_locals);
+                number_of_stack_items = copy_u2();
+                copyVerificationTypeInfo(number_of_stack_items);
+
+            }
+
+        }
+        set_u4(lenPtr,(u4)((genPos-lenPtr) - 4));
+
+    }
+
+    /* ========================================================================== */
+
+    static void injectBytes(u4 at, u4 len) {
+        u4 i;
+
+        NSK_DISPLAY2("Injecting %d bytes at %d\n", len, at);
+        for (i = at; i <= codeLength; i++) {
+            map[i] += len;
+        }
+    }
+
+    static void widen(u4 at, jbyte len) {
+        u4 i;
+        jbyte delta = len - widening[at];
+
+        NSK_DISPLAY2("Widening to %d bytes at %d\n", len, at);
+        /* mark at beginning of instruction */
+        widening[at] = len;
+        /* inject at end of instruction */
+        for (i = localPosition(); i <= codeLength; i++) {
+            map[i] += delta;
+        }
+    }
+
+    /* ========================================================================== */
+
+    /**
+     * Walk one instruction writing the transformed instruction.
+     */
+    static void writeInstruction() {
+        u4 pos = localPosition();
+        u4 newPos = map[pos];
+        u1 opcode = get_u1();
+
+        switch (opcode) {
+
+        case opc_wide:
+            put_u1(opcode);
+            copy(copy_u1() == opc_iinc ? 4 : 2);
+            break;
+
+        case opc_new:
+        case opc_newarray:
+        case opc_anewarray:
+        case opc_multianewarray:
+            put_u1(opcode);
+            copy(opcLengths[opcode] - 1);
+            if (mode == BCI_MODE_ALLOC) {
+                put(allocBytes, 3);
+            }
+            break;
+
+        case opc_jsr_w:
+        case opc_goto_w:
+            put_u1(opcode);
+            put_u4(map[pos + get_u4()] - newPos);
+            break;
+
+        case opc_jsr:
+        case opc_goto:
+        case opc_ifeq:
+        case opc_ifge:
+        case opc_ifgt:
+        case opc_ifle:
+        case opc_iflt:
+        case opc_ifne:
+        case opc_if_icmpeq:
+        case opc_if_icmpne:
+        case opc_if_icmpge:
+        case opc_if_icmpgt:
+        case opc_if_icmple:
+        case opc_if_icmplt:
+        case opc_if_acmpeq:
+        case opc_if_acmpne:
+        case opc_ifnull:
+        case opc_ifnonnull: {
+            u1 newOpcode = opcode;
+            jbyte widened = widening[pos];
+            if (widened == 0) { /* not widened */
+                put_u1(opcode);
+                put_u2((u2) (map[pos + (jshort) get_u2()] - newPos));
+            } else if (widened == 2) { /* wide form */
+                if (opcode == opc_jsr) {
+                    newOpcode = opc_jsr_w;
+                } else if (opcode == opc_jsr) {
+                    newOpcode = opc_goto_w;
+                } else {
+                    NSK_COMPLAIN1("unexpected opcode: %d\n", opcode);
+                }
+                put_u1(newOpcode);
+                put_u4(map[pos + (jshort) get_u2()] - newPos);
+            } else if (widened == 5) { /* insert goto_w */
+                switch (opcode) {
+                case opc_ifeq:
+                    newOpcode = opc_ifne;
+                    break;
+                case opc_ifge:
+                    newOpcode = opc_iflt;
+                    break;
+                case opc_ifgt:
+                    newOpcode = opc_ifle;
+                    break;
+                case opc_ifle:
+                    newOpcode = opc_ifgt;
+                    break;
+                case opc_iflt:
+                    newOpcode = opc_ifge;
+                    break;
+                case opc_ifne:
+                    newOpcode = opc_ifeq;
+                    break;
+                case opc_if_icmpeq:
+                    newOpcode = opc_if_icmpne;
+                    break;
+                case opc_if_icmpne:
+                    newOpcode = opc_if_icmpeq;
+                    break;
+                case opc_if_icmpge:
+                    newOpcode = opc_if_icmplt;
+                    break;
+                case opc_if_icmpgt:
+                    newOpcode = opc_if_icmple;
+                    break;
+                case opc_if_icmple:
+                    newOpcode = opc_if_icmpgt;
+                    break;
+                case opc_if_icmplt:
+                    newOpcode = opc_if_icmpge;
+                    break;
+                case opc_if_acmpeq:
+                    newOpcode = opc_if_acmpne;
+                    break;
+                case opc_if_acmpne:
+                    newOpcode = opc_if_acmpeq;
+                    break;
+                case opc_ifnull:
+                    newOpcode = opc_ifnonnull;
+                    break;
+                case opc_ifnonnull:
+                    newOpcode = opc_ifnull;
+                    break;
+                default:
+                    NSK_COMPLAIN1("unexpected opcode: %d\n", opcode);
+                    break;
+                }
+                put_u1(newOpcode);  /* write inverse branch */
+                put_u1(3 + 5);      /* beyond if and goto_w */
+                put_u1(opc_goto_w); /* add a goto_w */
+                put_u4(map[pos + (jshort) get_u2()] - newPos);
+            } else {
+                NSK_COMPLAIN2("unexpected widening: %d, pos=0x%x\n",
+                              widened, pos);
+            }
+            break;
+        }
+
+        case opc_tableswitch: {
+            u4 i, low, high;
+
+            put_u1(opcode);
+
+            /* skip old padding */
+            skip(((pos+4) & (~3)) - (pos+1));
+
+            /* write new padding */
+            put(zeroBytes, ((newPos+4) & (~3)) - (newPos+1));
+            put_u4(map[pos + get_u4()] - newPos);
+
+            low = copy_u4();
+            high = copy_u4();
+            for (i = low; i <= high; i++) {
+                put_u4(map[pos + get_u4()] - newPos);
+            }
+
+            break;
+        }
+
+        case opc_lookupswitch: {
+            u4 i, npairs;
+
+            put_u1(opcode);
+
+            /* skip old padding */
+            skip(((pos+4) & (~3)) - (pos+1));
+
+            /* write new padding */
+            put(zeroBytes, ((newPos+4) & (~3)) - (newPos+1));
+            put_u4(map[pos + get_u4()] - newPos);
+
+            npairs = copy_u4();
+            for (i = npairs; i > 0; i--) {
+                copy_u4();
+                put_u4(map[pos + get_u4()] - newPos);
+            }
+
+            break;
+        }
+
+        default:
+            put_u1(opcode);
+            copy(opcLengths[opcode] - 1);
+            break;
+        }
+
+    }
+
+    /* ========================================================================== */
+
+    /**
+     * Walk one instruction adjusting for insertions
+     */
+    static int adjustInstruction() {
+        u4 pos = localPosition();
+        u4 newPos = map[pos];
+        u1 opcode = get_u1();
+
+        switch (opcode) {
+
+        case opc_wide:
+            skip(get_u1() == opc_iinc ? 4 : 2);
+            break;
+
+        case opc_jsr:
+        case opc_goto:
+        case opc_ifeq:
+        case opc_ifge:
+        case opc_ifgt:
+        case opc_ifle:
+        case opc_iflt:
+        case opc_ifne:
+        case opc_if_icmpeq:
+        case opc_if_icmpne:
+        case opc_if_icmpge:
+        case opc_if_icmpgt:
+        case opc_if_icmple:
+        case opc_if_icmplt:
+        case opc_if_acmpeq:
+        case opc_if_acmpne:
+        case opc_ifnull:
+        case opc_ifnonnull: {
+            jbyte widened = widening[pos];
+            if (widened == 0) { /* not yet widened */
+                jint delta = (jshort) get_u2();
+                u4 target = pos + delta;
+                u4 newTarget = map[target];
+                jint newDelta = newTarget - newPos;
+                if ((newDelta < -32768) || (newDelta > 32767)) {
+                    if ((opcode == opc_jsr) || (opcode == opc_goto)) {
+                        widen(pos, 2); /* will convert to wide */
+                    } else {
+                        widen(pos, 5); /* will inject goto_w */
+                    }
+                    return NSK_FALSE;  /* cause restart */
+                }
+            }
+            break;
+        }
+
+        case opc_tableswitch: {
+            jbyte widened = widening[pos];
+            u4 low;
+            jbyte deltaPadding;
+
+            /* skip old padding and default */
+            skip(((pos+4) & (~3)) - (pos+1) + 4);
+            low = get_u4();
+            skip((get_u4() - low + 1) * 4);
+
+            deltaPadding = ((newPos+4) & (~3)) - newPos - ((pos+4) & (~3)) + pos;
+            if (widened != deltaPadding) {
+                widen(pos, deltaPadding);
+                return NSK_FALSE;  /* cause restart */
+            }
+            break;
+        }
+
+        case opc_lookupswitch: {
+            jbyte widened = widening[pos];
+            jbyte deltaPadding;
+
+            /* skip old padding and default */
+            skip(((pos+4) & (~3)) - (pos+1) + 4);
+            skip(get_u4() * 8);
+
+            deltaPadding = ((newPos+4) & (~3)) - newPos - ((pos+4) & (~3)) + pos;
+            if (widened != deltaPadding) {
+                widen(pos, deltaPadding);
+                return NSK_FALSE;  /* cause restart */
+            }
+            break;
+        }
+
+        default:
+            skip(opcLengths[opcode] - 1);
+            break;
+        }
+
+        return NSK_TRUE;
+    }
+
+    /* ========================================================================== */
+
+    /**
+     * Walk one instruction inserting instrumentation at specified instructions
+     */
+    static void insertAtInstruction() {
+        u4 pos = localPosition();
+        u1 opcode = get_u1();
+
+        switch (opcode) {
+
+        case opc_wide:
+            /* no support for instrumenting wide instructions */
+            skip(get_u1() == opc_iinc ? 4 : 2);
+            break;
+
+        case opc_new:
+        case opc_newarray:
+        case opc_anewarray:
+        case opc_multianewarray:
+            skip(opcLengths[opcode] - 1);
+            injectBytes(localPosition(), 3);
+            break;
+
+        case opc_tableswitch:
+            /* skip 4-byte boundry padding and default */
+            skip(((pos+4) & (~3)) - (pos+1) + 4);
+            {
+                u4 low = get_u4();
+                skip((get_u4() - low + 1) * 4);
+            }
+            break;
+
+        case opc_lookupswitch:
+            /* skip 4-byte boundry padding and default */
+            skip(((pos+4) & (~3)) - (pos+1) + 4);
+            skip(get_u4() * 8);
+            break;
+
+        default:
+            skip(opcLengths[opcode] - 1);
+            break;
+
+        }
+    }
+
+    static void adjustOffsets() {
+        recallPosition();
+
+        if (mode == BCI_MODE_CALL) {
+            /* instrument calls - method entry */
+            injectBytes(0, 3);
+        }
+
+        if (mode == BCI_MODE_ALLOC) {
+            /* instrument allocations */
+            while (localPosition() < codeLength) {
+                insertAtInstruction();
+            }
+            recallPosition();
+        }
+
+        NSK_DISPLAY0("Searching for adjustments...\n");
+        while (localPosition() < codeLength) {
+            if (!adjustInstruction()) {
+                recallPosition();
+                NSK_DISPLAY0("Restarting adjustments after change...\n");
+            }
+        }
+
+        NSK_DISPLAY0("Writing new code...\n");
+        recallPosition();
+
+        if (mode == BCI_MODE_CALL) {
+            put(callBytes, 3);
+        }
+
+        while (localPosition() < codeLength) {
+            writeInstruction();
+        }
+    }
+
+    /* ========================================================================== */
+
+    static void copyAttr() {
+        u4 len;
+
+        copy(2);
+        len = copy_u4();
+        NSK_DISPLAY1("attr len: %d\n", len);
+        copy(len);
+    }
+
+    static void copyAttrs(u2 attrCount) {
+        u2 i;
+
+        for (i = attrCount; i > 0; i--) {
+            copyAttr();
+        }
+    }
+
+    static void copyFields() {
+        u2 count;
+        u2 attrCount;
+        u2 i;
+
+        count = copy_u2();
+        NSK_DISPLAY1("fields count: %d\n", count);
+        for (i = count; i > 0; i--) {
+            /* access, name, descriptor */
+            copy(2 + 2 + 2);
+            attrCount = copy_u2();
+            NSK_DISPLAY1("field attrCount: %d\n", attrCount);
+            copyAttrs(attrCount);
+        }
+    }
+
+    static void copyAttrForCode() {
+        u2 nameIndex = copy_u2();
+
+        /* check for Code attr */
+        if (nameIndex == lineNumberAttributeIndex) {
+            copyLineNumberAttr();
+        } else if (nameIndex == localVarAttributeIndex) {
+            copyLocalVarAttr();
+        } else if (nameIndex == localVarTypeAttributeIndex) {
+            copyLocalVarTypeAttr();
+        } else if (nameIndex == stackMapAttributeIndex) {
+            copyStackMapAttr();
+        } else {
+            u4 len = copy_u4();
+            NSK_DISPLAY1("code attr len: %d\n", len);
+            copy(len);
+        }
+    }
+
+    static void copyCodeAttr(char* name) {
+        u4 attrLengthPos;
+        u4 attrLength;
+        u4 newAttrLength;
+        u4 codeLengthPos;
+        u4 newCodeLength;
+        u2 attrCount;
+        u4 i;
+
+        attrLengthPos = generatedPosition();
+        attrLength = copy_u4();
+
+        NSK_DISPLAY2("Code attr found: %s, pos=0x%x\n", name,
+                     inputPos - orig - 6);
+
+        /* max_stack, max_locals */
+        copy(2 + 2);
+
+        codeLengthPos = generatedPosition();
+        codeLength = copy_u4();
+
+        if (codeLength == 0) {
+            NSK_COMPLAIN0("code_length must be greater than zero\n");
+            return;
+        }
+
+        if (mode == BCI_MODE_EMCP) {
+            /* copy remainder minus already copied */
+            copy(attrLength - 8);
+            return;
+        }
+
+        markLocalPositionStart();
+
+        map = (u4*) malloc((codeLength + 1) * sizeof(u4));
+        for (i = 0; i <= codeLength; i++) {
+            map[i] = i;
+        }
+
+        widening = (jbyte*) malloc(codeLength + 1);
+        memset(widening, 0, codeLength + 1);
+
+        adjustOffsets();
+
+        /* fix up code length */
+        newCodeLength = generatedPosition() - (codeLengthPos + 4);
+        randomAccessWriteU4(codeLengthPos, newCodeLength);
+        NSK_DISPLAY2("code length old: %d, new: %d\n",
+                     codeLength, newCodeLength);
+
+        copyExceptionTable();
+
+        attrCount = copy_u2();
+        for (i = attrCount; i > 0; i--) {
+            copyAttrForCode();
+        }
+
+        free(map);
+        free(widening);
+
+        /* fix up attr length */
+        newAttrLength = generatedPosition() - (attrLengthPos + 4);
+        randomAccessWriteU4(attrLengthPos, newAttrLength);
+        NSK_DISPLAY2("attr length old: %d, new: %d\n",
+                     attrLength, newAttrLength);
+    }
+
+    static void copyAttrForMethod(char* name) {
+        u2 nameIndex;
+
+        nameIndex = copy_u2();
+        if (nameIndex == codeAttributeIndex) {
+            copyCodeAttr(name);
+        } else {
+            u4 len = copy_u4();
+
+            NSK_DISPLAY1("method attr len: %d\n", len);
+            copy(len);
+        }
+    }
+
+    static void copyMethod() {
+        u2 accessFlags;
+        u2 methodNameIdx;
+        char* name;
+        u2 attrCount;
+        u2 i;
+
+        accessFlags = copy_u2();
+        methodNameIdx = copy_u2();
+        name = constantPool[methodNameIdx];
+
+        /* descriptor */
+        copy(2);
+
+        attrCount = copy_u2();
+        NSK_DISPLAY1("method attrCount: %d\n", attrCount);
+        for (i = attrCount; i > 0; i--) {
+            copyAttrForMethod(name);
+        }
+    }
+
+    static void copyMethods() {
+        u2 count;
+        u2 i;
+
+        count = copy_u2();
+        NSK_DISPLAY1("methods count: %d\n", count);
+        for (i = count; i > 0; i--) {
+            copyMethod();
+        }
+    }
+
+    static u2 writeCPEntryUtf8(char* str) {
+        u2 i;
+        u2 len = (u2) strlen(str);
+        put_u1(CONSTANT_Utf8);
+        put_u2(len);
+        for (i = 0; i < len; i++) {
+            put_u1(str[i]);
+        }
+        return constantPoolCount++;
+    }
+
+    static u2 writeCPEntryClass(u2 classNameIndex) {
+        put_u1(CONSTANT_Class);
+        put_u2(classNameIndex);
+        return constantPoolCount++;
+    }
+
+    static u2 writeCPEntryNameAndType(u2 nameIndex, u2 descrIndex) {
+        put_u1(CONSTANT_NameAndType);
+        put_u2(nameIndex);
+        put_u2(descrIndex);
+        return constantPoolCount++;
+    }
+
+    static u2 writeCPEntryMethodRef(u2 classIndex, u2 nameAndTypeIndex) {
+        put_u1(CONSTANT_Methodref);
+        put_u2(classIndex);
+        put_u2(nameAndTypeIndex);
+        return constantPoolCount++;
+    }
+
+    static u2 writeCPEntryFieldRef(u2 classIndex, u2 nameAndTypeIndex) {
+        put_u1(CONSTANT_Fieldref);
+        put_u2(classIndex);
+        put_u2(nameAndTypeIndex);
+        return constantPoolCount++;
+    }
+
+    static u2 addFieldToConstantPool(u2 classIndex, char* fieldName, char* descr) {
+        u2 fieldNameIndex = writeCPEntryUtf8(fieldName);
+        u2 descrIndex = writeCPEntryUtf8(descr);
+        u2 nameAndTypeIndex = writeCPEntryNameAndType(fieldNameIndex, descrIndex);
+        u2 fieldIndex = writeCPEntryFieldRef(classIndex, nameAndTypeIndex);
+        return fieldIndex;
+    }
+
+    static u2 addMethodToConstantPool(u2 classIndex, char* methodName, char* descr) {
+        u2 methodNameIndex = writeCPEntryUtf8(methodName);
+        u2 descrIndex = writeCPEntryUtf8(descr);
+        u2 nameAndTypeIndex = writeCPEntryNameAndType(methodNameIndex, descrIndex);
+        u2 methodIndex = writeCPEntryMethodRef(classIndex, nameAndTypeIndex);
+        return methodIndex;
+    }
+
+    static u2 addClassToConstantPool(char* className) {
+        u2 classNameIndex = writeCPEntryUtf8(className);
+        u2 classIndex = writeCPEntryClass(classNameIndex);
+        return classIndex;
+    }
+
+    /* ========================================================================== */
+
+    int Inject(const u1* old_bytes, const jint old_length,
+               u1** new_bytes, jint* new_length, int bci_mode) {
+        u4 constantPoolCountPos;
+        u2 profiler;
+        u2 interfaceCount;
+        u2 attrCount;
+
+        //printf("inject\n");
+        NSK_DISPLAY3("Injecting bytecodes: mode=%d, bytes=0x%p, len=%d\n",
+                     bci_mode, old_bytes, old_length);
+
+        mode = bci_mode;
+        orig = old_bytes;
+        inputPos = (u1*) orig;
+        endPos = orig + old_length;
+        gen = (u1*) malloc(old_length * GROWTH_FACTOR);
+        if (!NSK_VERIFY(gen != NULL)) {
+            NSK_COMPLAIN0("out of memory\n");
+            return NSK_FALSE;
+        }
+
+        genPos = gen;
+
+        /* magic + minor/major version */
+        copy(4 + 2 + 2);
+
+        constantPoolCountPos = generatedPosition();
+        constantPoolCount = copy_u2();
+
+        /* copy old constant pool */
+        if (!copyConstantPool(constantPoolCount)) {
+            return NSK_FALSE;
+        }
+        NSK_DISPLAY1("ConstantPool expanded from: %d\n", constantPoolCount);
+
+        profiler = addClassToConstantPool("nsk/share/jvmti/ProfileCollector");
+
+        if (mode == BCI_MODE_ALLOC) {
+            u2 allocTracker =
+                addMethodToConstantPool(profiler, "allocTracker", "()V");
+            allocBytes[1] = (u1) (allocTracker >> 8);
+            allocBytes[2] = (u1) (allocTracker & 0xFF);
+        }
+
+        if (mode == BCI_MODE_CALL) {
+            u2 callTracker =
+                addMethodToConstantPool(profiler, "callTracker", "()V");
+            callBytes[1] = (u1) (callTracker >> 8);
+            callBytes[2] = (u1) (callTracker & 0xFF);
+        }
+
+        /* access, this, super */
+        copy(2 + 2 + 2);
+
+        interfaceCount = copy_u2();
+        NSK_DISPLAY1("interfaceCount: %d\n", interfaceCount);
+        copy(interfaceCount * 2);
+
+        copyFields();
+        copyMethods();
+
+        attrCount = copy_u2();
+        NSK_DISPLAY1("class attrCount: %d\n", attrCount);
+        copyAttrs(attrCount);
+
+        randomAccessWriteU2(constantPoolCountPos, constantPoolCount);
+        NSK_DISPLAY1("New constant pool size: %d\n", constantPoolCount);
+
+        *new_length = (jint) (genPos - gen);
+        *new_bytes = realloc(gen, *new_length);
+
+        freeConstantPool();
+
+        return NSK_TRUE;
+    }
+
+    /* ========================================================================== */
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/Injector.h	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,312 @@
+/*
+ * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#ifndef _NSK_SHARE_JVMTI_INJECTOR_H_
+#define _NSK_SHARE_JVMTI_INJECTOR_H_
+
+/* Class File Format Constants
+ */
+
+typedef unsigned char   u1;
+typedef unsigned short  u2;
+typedef unsigned int    u4;
+
+/* Constant table */
+enum {
+    CONSTANT_Utf8                = 1,
+    CONSTANT_Integer             = 3,
+    CONSTANT_Float               = 4,
+    CONSTANT_Long                = 5,
+    CONSTANT_Double              = 6,
+    CONSTANT_Class               = 7,
+    CONSTANT_String              = 8,
+    CONSTANT_Fieldref            = 9,
+    CONSTANT_Methodref           = 10,
+    CONSTANT_InterfaceMethodref  = 11,
+    CONSTANT_NameAndType         = 12,
+    CONSTANT_MethodHandle        = 15,
+    CONSTANT_MethodType          = 16,
+    CONSTANT_InvokeDynamic       = 18
+};
+
+/* Access and modifier flags */
+enum {
+    ACC_PUBLIC                   = 0x00000001,
+    ACC_PRIVATE                  = 0x00000002,
+    ACC_PROTECTED                = 0x00000004,
+    ACC_STATIC                   = 0x00000008,
+    ACC_FINAL                    = 0x00000010,
+    ACC_SYNCHRONIZED             = 0x00000020,
+    ACC_VOLATILE                 = 0x00000040,
+    ACC_TRANSIENT                = 0x00000080,
+    ACC_NATIVE                   = 0x00000100,
+    ACC_INTERFACE                = 0x00000200,
+    ACC_ABSTRACT                 = 0x00000400,
+    ACC_SUPER                    = 0x00000020,
+    ACC_STRICT                   = 0x00000800
+};
+
+/* Opcodes */
+enum {
+    opc_nop                      = 0,
+    opc_aconst_null              = 1,
+    opc_iconst_m1                = 2,
+    opc_iconst_0                 = 3,
+    opc_iconst_1                 = 4,
+    opc_iconst_2                 = 5,
+    opc_iconst_3                 = 6,
+    opc_iconst_4                 = 7,
+    opc_iconst_5                 = 8,
+    opc_lconst_0                 = 9,
+    opc_lconst_1                 = 10,
+    opc_fconst_0                 = 11,
+    opc_fconst_1                 = 12,
+    opc_fconst_2                 = 13,
+    opc_dconst_0                 = 14,
+    opc_dconst_1                 = 15,
+    opc_bipush                   = 16,
+    opc_sipush                   = 17,
+    opc_ldc                      = 18,
+    opc_ldc_w                    = 19,
+    opc_ldc2_w                   = 20,
+    opc_iload                    = 21,
+    opc_lload                    = 22,
+    opc_fload                    = 23,
+    opc_dload                    = 24,
+    opc_aload                    = 25,
+    opc_iload_0                  = 26,
+    opc_iload_1                  = 27,
+    opc_iload_2                  = 28,
+    opc_iload_3                  = 29,
+    opc_lload_0                  = 30,
+    opc_lload_1                  = 31,
+    opc_lload_2                  = 32,
+    opc_lload_3                  = 33,
+    opc_fload_0                  = 34,
+    opc_fload_1                  = 35,
+    opc_fload_2                  = 36,
+    opc_fload_3                  = 37,
+    opc_dload_0                  = 38,
+    opc_dload_1                  = 39,
+    opc_dload_2                  = 40,
+    opc_dload_3                  = 41,
+    opc_aload_0                  = 42,
+    opc_aload_1                  = 43,
+    opc_aload_2                  = 44,
+    opc_aload_3                  = 45,
+    opc_iaload                   = 46,
+    opc_laload                   = 47,
+    opc_faload                   = 48,
+    opc_daload                   = 49,
+    opc_aaload                   = 50,
+    opc_baload                   = 51,
+    opc_caload                   = 52,
+    opc_saload                   = 53,
+    opc_istore                   = 54,
+    opc_lstore                   = 55,
+    opc_fstore                   = 56,
+    opc_dstore                   = 57,
+    opc_astore                   = 58,
+    opc_istore_0                 = 59,
+    opc_istore_1                 = 60,
+    opc_istore_2                 = 61,
+    opc_istore_3                 = 62,
+    opc_lstore_0                 = 63,
+    opc_lstore_1                 = 64,
+    opc_lstore_2                 = 65,
+    opc_lstore_3                 = 66,
+    opc_fstore_0                 = 67,
+    opc_fstore_1                 = 68,
+    opc_fstore_2                 = 69,
+    opc_fstore_3                 = 70,
+    opc_dstore_0                 = 71,
+    opc_dstore_1                 = 72,
+    opc_dstore_2                 = 73,
+    opc_dstore_3                 = 74,
+    opc_astore_0                 = 75,
+    opc_astore_1                 = 76,
+    opc_astore_2                 = 77,
+    opc_astore_3                 = 78,
+    opc_iastore                  = 79,
+    opc_lastore                  = 80,
+    opc_fastore                  = 81,
+    opc_dastore                  = 82,
+    opc_aastore                  = 83,
+    opc_bastore                  = 84,
+    opc_castore                  = 85,
+    opc_sastore                  = 86,
+    opc_pop                      = 87,
+    opc_pop2                     = 88,
+    opc_dup                      = 89,
+    opc_dup_x1                   = 90,
+    opc_dup_x2                   = 91,
+    opc_dup2                     = 92,
+    opc_dup2_x1                  = 93,
+    opc_dup2_x2                  = 94,
+    opc_swap                     = 95,
+    opc_iadd                     = 96,
+    opc_ladd                     = 97,
+    opc_fadd                     = 98,
+    opc_dadd                     = 99,
+    opc_isub                     = 100,
+    opc_lsub                     = 101,
+    opc_fsub                     = 102,
+    opc_dsub                     = 103,
+    opc_imul                     = 104,
+    opc_lmul                     = 105,
+    opc_fmul                     = 106,
+    opc_dmul                     = 107,
+    opc_idiv                     = 108,
+    opc_ldiv                     = 109,
+    opc_fdiv                     = 110,
+    opc_ddiv                     = 111,
+    opc_irem                     = 112,
+    opc_lrem                     = 113,
+    opc_frem                     = 114,
+    opc_drem                     = 115,
+    opc_ineg                     = 116,
+    opc_lneg                     = 117,
+    opc_fneg                     = 118,
+    opc_dneg                     = 119,
+    opc_ishl                     = 120,
+    opc_lshl                     = 121,
+    opc_ishr                     = 122,
+    opc_lshr                     = 123,
+    opc_iushr                    = 124,
+    opc_lushr                    = 125,
+    opc_iand                     = 126,
+    opc_land                     = 127,
+    opc_ior                      = 128,
+    opc_lor                      = 129,
+    opc_ixor                     = 130,
+    opc_lxor                     = 131,
+    opc_iinc                     = 132,
+    opc_i2l                      = 133,
+    opc_i2f                      = 134,
+    opc_i2d                      = 135,
+    opc_l2i                      = 136,
+    opc_l2f                      = 137,
+    opc_l2d                      = 138,
+    opc_f2i                      = 139,
+    opc_f2l                      = 140,
+    opc_f2d                      = 141,
+    opc_d2i                      = 142,
+    opc_d2l                      = 143,
+    opc_d2f                      = 144,
+    opc_i2b                      = 145,
+    opc_i2c                      = 146,
+    opc_i2s                      = 147,
+    opc_lcmp                     = 148,
+    opc_fcmpl                    = 149,
+    opc_fcmpg                    = 150,
+    opc_dcmpl                    = 151,
+    opc_dcmpg                    = 152,
+    opc_ifeq                     = 153,
+    opc_ifne                     = 154,
+    opc_iflt                     = 155,
+    opc_ifge                     = 156,
+    opc_ifgt                     = 157,
+    opc_ifle                     = 158,
+    opc_if_icmpeq                = 159,
+    opc_if_icmpne                = 160,
+    opc_if_icmplt                = 161,
+    opc_if_icmpge                = 162,
+    opc_if_icmpgt                = 163,
+    opc_if_icmple                = 164,
+    opc_if_acmpeq                = 165,
+    opc_if_acmpne                = 166,
+    opc_goto                     = 167,
+    opc_jsr                      = 168,
+    opc_ret                      = 169,
+    opc_tableswitch              = 170,
+    opc_lookupswitch             = 171,
+    opc_ireturn                  = 172,
+    opc_lreturn                  = 173,
+    opc_freturn                  = 174,
+    opc_dreturn                  = 175,
+    opc_areturn                  = 176,
+    opc_return                   = 177,
+    opc_getstatic                = 178,
+    opc_putstatic                = 179,
+    opc_getfield                 = 180,
+    opc_putfield                 = 181,
+    opc_invokevirtual            = 182,
+    opc_invokespecial            = 183,
+    opc_invokestatic             = 184,
+    opc_invokeinterface          = 185,
+    opc_invokedynamic            = 186,
+    opc_new                      = 187,
+    opc_newarray                 = 188,
+    opc_anewarray                = 189,
+    opc_arraylength              = 190,
+    opc_athrow                   = 191,
+    opc_checkcast                = 192,
+    opc_instanceof               = 193,
+    opc_monitorenter             = 194,
+    opc_monitorexit              = 195,
+    opc_wide                     = 196,
+    opc_multianewarray           = 197,
+    opc_ifnull                   = 198,
+    opc_ifnonnull                = 199,
+    opc_goto_w                   = 200,
+    opc_jsr_w                    = 201,
+    opc_breakpoint               = 202
+};
+
+enum {
+    BCI_MODE_EMCP   = 0,
+    BCI_MODE_CALL   = 1,
+    BCI_MODE_ALLOC  = 2
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Class file transformer. Transforms a classfile image from old_bytes
+ * to a new classfile image new_bytes according to value of bci_mode.
+ * The new classfile image is allocated with malloc(), and should be
+ * freed by the caller. The possible bci_mode values:
+ *
+ *  BCI_MODE_EMCP
+ *      dummy, without injection any bytecodes
+ *
+ *  BCI_MODE_CALL
+ *      inject invokestatic call to ProfileCollector.callTracker()
+ *      at the beginning of all methods
+ *
+ *    BCI_MODE_ALLOC
+ *      inject invokestatic call to ProfileCollector.allocTracker()
+ *      immediately following new/newarray opcodes.
+ *
+ */
+
+int Inject(const u1* old_bytes, const jint old_length,
+    u1** new_bytes, jint* new_length, int bci_mode);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NSK_SHARE_JVMTI_INJECTOR_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/JVMTITools.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,331 @@
+/*
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "JVMTITools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const char* TranslateState(jint flags) {
+    static char str[15 * 20];
+
+    if (flags == 0)
+        return "<none>";
+
+    str[0] = '\0';
+
+    if (flags & JVMTI_THREAD_STATE_ALIVE) {
+        strcat(str, " ALIVE");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_TERMINATED) {
+        strcat(str, " TERMINATED");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_RUNNABLE) {
+        strcat(str, " RUNNABLE");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_WAITING) {
+        strcat(str, " WAITING");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_WAITING_INDEFINITELY) {
+        strcat(str, " WAITING_INDEFINITELY");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT) {
+        strcat(str, " WAITING_WITH_TIMEOUT");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_SLEEPING) {
+        strcat(str, " SLEEPING");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_IN_OBJECT_WAIT) {
+        strcat(str, " IN_OBJECT_WAIT");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_PARKED) {
+        strcat(str, " PARKED");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER) {
+        strcat(str, " BLOCKED_ON_MONITOR_ENTER");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_SUSPENDED) {
+        strcat(str, " SUSPENDED");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_INTERRUPTED) {
+        strcat(str, " INTERRUPTED");
+    }
+
+    if (flags & JVMTI_THREAD_STATE_IN_NATIVE) {
+        strcat(str, " IN_NATIVE");
+    }
+
+
+    return str;
+}
+
+const char* TranslateEvent(jvmtiEvent event_type) {
+    switch (event_type) {
+    case JVMTI_EVENT_VM_INIT:
+        return ("JVMTI_EVENT_VM_INIT");
+    case JVMTI_EVENT_VM_DEATH:
+        return ("JVMTI_EVENT_VM_DEATH");
+    case JVMTI_EVENT_THREAD_START:
+        return ("JVMTI_EVENT_THREAD_START");
+    case JVMTI_EVENT_THREAD_END:
+        return ("JVMTI_EVENT_THREAD_END");
+    case JVMTI_EVENT_CLASS_FILE_LOAD_HOOK:
+        return ("JVMTI_EVENT_CLASS_FILE_LOAD_HOOK");
+    case JVMTI_EVENT_CLASS_LOAD:
+        return ("JVMTI_EVENT_CLASS_LOAD");
+    case JVMTI_EVENT_CLASS_PREPARE:
+        return ("JVMTI_EVENT_CLASS_PREPARE");
+    case JVMTI_EVENT_VM_START:
+        return ("JVMTI_EVENT_VM_START");
+    case JVMTI_EVENT_EXCEPTION:
+        return ("JVMTI_EVENT_EXCEPTION");
+    case JVMTI_EVENT_EXCEPTION_CATCH:
+        return ("JVMTI_EVENT_EXCEPTION_CATCH");
+    case JVMTI_EVENT_SINGLE_STEP:
+        return ("JVMTI_EVENT_SINGLE_STEP");
+    case JVMTI_EVENT_FRAME_POP:
+        return ("JVMTI_EVENT_FRAME_POP");
+    case JVMTI_EVENT_BREAKPOINT:
+        return ("JVMTI_EVENT_BREAKPOINT");
+    case JVMTI_EVENT_FIELD_ACCESS:
+        return ("JVMTI_EVENT_FIELD_ACCESS");
+    case JVMTI_EVENT_FIELD_MODIFICATION:
+        return ("JVMTI_EVENT_FIELD_MODIFICATION");
+    case JVMTI_EVENT_METHOD_ENTRY:
+        return ("JVMTI_EVENT_METHOD_ENTRY");
+    case JVMTI_EVENT_METHOD_EXIT:
+        return ("JVMTI_EVENT_METHOD_EXIT");
+    case JVMTI_EVENT_NATIVE_METHOD_BIND:
+        return ("JVMTI_EVENT_NATIVE_METHOD_BIND");
+    case JVMTI_EVENT_COMPILED_METHOD_LOAD:
+        return ("JVMTI_EVENT_COMPILED_METHOD_LOAD");
+    case JVMTI_EVENT_COMPILED_METHOD_UNLOAD:
+        return ("JVMTI_EVENT_COMPILED_METHOD_UNLOAD");
+    case JVMTI_EVENT_DYNAMIC_CODE_GENERATED:
+        return ("JVMTI_EVENT_DYNAMIC_CODE_GENERATED");
+    case JVMTI_EVENT_DATA_DUMP_REQUEST:
+        return ("JVMTI_EVENT_DATA_DUMP_REQUEST");
+    case JVMTI_EVENT_MONITOR_WAIT:
+        return ("JVMTI_EVENT_MONITOR_WAIT");
+    case JVMTI_EVENT_MONITOR_WAITED:
+        return ("JVMTI_EVENT_MONITOR_WAITED");
+    case JVMTI_EVENT_MONITOR_CONTENDED_ENTER:
+        return ("JVMTI_EVENT_MONITOR_CONTENDED_ENTER");
+    case JVMTI_EVENT_MONITOR_CONTENDED_ENTERED:
+        return ("JVMTI_EVENT_MONITOR_CONTENDED_ENTERED");
+    case JVMTI_EVENT_GARBAGE_COLLECTION_START:
+        return ("JVMTI_EVENT_GARBAGE_COLLECTION_START");
+    case JVMTI_EVENT_GARBAGE_COLLECTION_FINISH:
+        return ("JVMTI_EVENT_GARBAGE_COLLECTION_FINISH");
+    case JVMTI_EVENT_OBJECT_FREE:
+        return ("JVMTI_EVENT_OBJECT_FREE");
+    case JVMTI_EVENT_VM_OBJECT_ALLOC:
+        return ("JVMTI_EVENT_VM_OBJECT_ALLOC");
+    default:
+        return ("<unknown event>");
+    }
+}
+
+const char* TranslateError(jvmtiError err) {
+    switch (err) {
+    case JVMTI_ERROR_NONE:
+        return ("JVMTI_ERROR_NONE");
+    case JVMTI_ERROR_INVALID_THREAD:
+        return ("JVMTI_ERROR_INVALID_THREAD");
+    case JVMTI_ERROR_INVALID_THREAD_GROUP:
+        return ("JVMTI_ERROR_INVALID_THREAD_GROUP");
+    case JVMTI_ERROR_INVALID_PRIORITY:
+        return ("JVMTI_ERROR_INVALID_PRIORITY");
+    case JVMTI_ERROR_THREAD_NOT_SUSPENDED:
+        return ("JVMTI_ERROR_THREAD_NOT_SUSPENDED");
+    case JVMTI_ERROR_THREAD_SUSPENDED:
+        return ("JVMTI_ERROR_THREAD_SUSPENDED");
+    case JVMTI_ERROR_THREAD_NOT_ALIVE:
+        return ("JVMTI_ERROR_THREAD_NOT_ALIVE");
+    case JVMTI_ERROR_INVALID_OBJECT:
+        return ("JVMTI_ERROR_INVALID_OBJECT");
+    case JVMTI_ERROR_INVALID_CLASS:
+        return ("JVMTI_ERROR_INVALID_CLASS");
+    case JVMTI_ERROR_CLASS_NOT_PREPARED:
+        return ("JVMTI_ERROR_CLASS_NOT_PREPARED");
+    case JVMTI_ERROR_INVALID_METHODID:
+        return ("JVMTI_ERROR_INVALID_METHODID");
+    case JVMTI_ERROR_INVALID_LOCATION:
+        return ("JVMTI_ERROR_INVALID_LOCATION");
+    case JVMTI_ERROR_INVALID_FIELDID:
+        return ("JVMTI_ERROR_INVALID_FIELDID");
+    case JVMTI_ERROR_NO_MORE_FRAMES:
+        return ("JVMTI_ERROR_NO_MORE_FRAMES");
+    case JVMTI_ERROR_OPAQUE_FRAME:
+        return ("JVMTI_ERROR_OPAQUE_FRAME");
+    case JVMTI_ERROR_TYPE_MISMATCH:
+        return ("JVMTI_ERROR_TYPE_MISMATCH");
+    case JVMTI_ERROR_INVALID_SLOT:
+        return ("JVMTI_ERROR_INVALID_SLOT");
+    case JVMTI_ERROR_DUPLICATE:
+        return ("JVMTI_ERROR_DUPLICATE");
+    case JVMTI_ERROR_NOT_FOUND:
+        return ("JVMTI_ERROR_NOT_FOUND");
+    case JVMTI_ERROR_INVALID_MONITOR:
+        return ("JVMTI_ERROR_INVALID_MONITOR");
+    case JVMTI_ERROR_NOT_MONITOR_OWNER:
+        return ("JVMTI_ERROR_NOT_MONITOR_OWNER");
+    case JVMTI_ERROR_INTERRUPT:
+        return ("JVMTI_ERROR_INTERRUPT");
+    case JVMTI_ERROR_INVALID_CLASS_FORMAT:
+        return ("JVMTI_ERROR_INVALID_CLASS_FORMAT");
+    case JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION:
+        return ("JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION");
+    case JVMTI_ERROR_FAILS_VERIFICATION:
+        return ("JVMTI_ERROR_FAILS_VERIFICATION");
+    case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED:
+        return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED");
+    case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED:
+        return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED");
+    case JVMTI_ERROR_INVALID_TYPESTATE:
+        return ("JVMTI_ERROR_INVALID_TYPESTATE");
+    case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED:
+        return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED");
+    case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED:
+        return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED");
+    case JVMTI_ERROR_UNSUPPORTED_VERSION:
+        return ("JVMTI_ERROR_UNSUPPORTED_VERSION");
+    case JVMTI_ERROR_NAMES_DONT_MATCH:
+        return ("JVMTI_ERROR_NAMES_DONT_MATCH");
+    case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED:
+        return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED");
+    case JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED:
+        return ("JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED");
+    case JVMTI_ERROR_UNMODIFIABLE_CLASS:
+        return ("JVMTI_ERROR_UNMODIFIABLE_CLASS");
+    case JVMTI_ERROR_NOT_AVAILABLE:
+        return ("JVMTI_ERROR_NOT_AVAILABLE");
+    case JVMTI_ERROR_MUST_POSSESS_CAPABILITY:
+        return ("JVMTI_ERROR_MUST_POSSESS_CAPABILITY");
+    case JVMTI_ERROR_NULL_POINTER:
+        return ("JVMTI_ERROR_NULL_POINTER");
+    case JVMTI_ERROR_ABSENT_INFORMATION:
+        return ("JVMTI_ERROR_ABSENT_INFORMATION");
+    case JVMTI_ERROR_INVALID_EVENT_TYPE:
+        return ("JVMTI_ERROR_INVALID_EVENT_TYPE");
+    case JVMTI_ERROR_ILLEGAL_ARGUMENT:
+        return ("JVMTI_ERROR_ILLEGAL_ARGUMENT");
+    case JVMTI_ERROR_NATIVE_METHOD:
+        return ("JVMTI_ERROR_NATIVE_METHOD");
+    case JVMTI_ERROR_OUT_OF_MEMORY:
+        return ("JVMTI_ERROR_OUT_OF_MEMORY");
+    case JVMTI_ERROR_ACCESS_DENIED:
+        return ("JVMTI_ERROR_ACCESS_DENIED");
+    case JVMTI_ERROR_WRONG_PHASE:
+        return ("JVMTI_ERROR_WRONG_PHASE");
+    case JVMTI_ERROR_INTERNAL:
+        return ("JVMTI_ERROR_INTERNAL");
+    case JVMTI_ERROR_UNATTACHED_THREAD:
+        return ("JVMTI_ERROR_UNATTACHED_THREAD");
+    case JVMTI_ERROR_INVALID_ENVIRONMENT:
+        return ("JVMTI_ERROR_INVALID_ENVIRONMENT");
+    default:
+        return ("<unknown error>");
+    }
+}
+
+const char* TranslatePhase(jvmtiPhase phase) {
+    switch (phase) {
+    case JVMTI_PHASE_ONLOAD:
+        return ("JVMTI_PHASE_ONLOAD");
+    case JVMTI_PHASE_PRIMORDIAL:
+        return ("JVMTI_PHASE_PRIMORDIAL");
+    case JVMTI_PHASE_START:
+        return ("JVMTI_PHASE_START");
+    case JVMTI_PHASE_LIVE:
+        return ("JVMTI_PHASE_LIVE");
+    case JVMTI_PHASE_DEAD:
+        return ("JVMTI_PHASE_DEAD");
+    default:
+        return ("<unknown phase>");
+    }
+}
+
+const char* TranslateRootKind(jvmtiHeapRootKind root) {
+    switch (root) {
+    case JVMTI_HEAP_ROOT_JNI_GLOBAL:
+        return ("JVMTI_HEAP_ROOT_JNI_GLOBAL");
+    case JVMTI_HEAP_ROOT_JNI_LOCAL:
+        return ("JVMTI_HEAP_ROOT_JNI_LOCAL");
+    case JVMTI_HEAP_ROOT_SYSTEM_CLASS:
+        return ("JVMTI_HEAP_ROOT_SYSTEM_CLASS");
+    case JVMTI_HEAP_ROOT_MONITOR:
+        return ("JVMTI_HEAP_ROOT_MONITOR");
+    case JVMTI_HEAP_ROOT_STACK_LOCAL:
+        return ("JVMTI_HEAP_ROOT_STACK_LOCAL");
+    case JVMTI_HEAP_ROOT_THREAD:
+        return ("JVMTI_HEAP_ROOT_THREAD");
+    case JVMTI_HEAP_ROOT_OTHER:
+        return ("JVMTI_HEAP_ROOT_OTHER");
+    default:
+        return ("<unknown root kind>");
+    }
+}
+
+const char* TranslateObjectRefKind(jvmtiObjectReferenceKind ref) {
+    switch (ref) {
+    case JVMTI_REFERENCE_CLASS:
+        return ("JVMTI_REFERENCE_CLASS");
+    case JVMTI_REFERENCE_FIELD:
+        return ("JVMTI_REFERENCE_FIELD");
+    case JVMTI_REFERENCE_ARRAY_ELEMENT:
+        return ("JVMTI_REFERENCE_ARRAY_ELEMENT");
+    case JVMTI_REFERENCE_CLASS_LOADER:
+        return ("JVMTI_REFERENCE_CLASS_LOADER");
+    case JVMTI_REFERENCE_SIGNERS:
+        return ("JVMTI_REFERENCE_SIGNERS");
+    case JVMTI_REFERENCE_PROTECTION_DOMAIN:
+        return ("JVMTI_REFERENCE_PROTECTION_DOMAIN");
+    case JVMTI_REFERENCE_INTERFACE:
+        return ("JVMTI_REFERENCE_INTERFACE");
+    case JVMTI_REFERENCE_STATIC_FIELD:
+        return ("JVMTI_REFERENCE_STATIC_FIELD");
+    case JVMTI_REFERENCE_CONSTANT_POOL:
+        return ("JVMTI_REFERENCE_CONSTANT_POOL");
+    default:
+        return ("<unknown reference kind>");
+    }
+}
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/JVMTITools.h	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#ifndef _NSK_SHARE_JVMTI_JVMTITOOLS_H_
+#define _NSK_SHARE_JVMTI_JVMTITOOLS_H_
+
+#include "jvmti.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Return string representation of given JVMTI event constant.
+ */
+const char* TranslateEvent(jvmtiEvent event_type);
+
+/**
+ * Return string representation of given JVMTI thread state constant.
+ */
+const char* TranslateState(jint flags);
+
+/**
+ * Return string representation of given JVMTI error code.
+ */
+const char* TranslateError(jvmtiError err);
+
+/**
+ * Return string representation of given phase of VM execution.
+ */
+const char* TranslatePhase(jvmtiPhase phase);
+
+/**
+ * Return string representation of given heap root kind.
+ */
+const char* TranslateRootKind(jvmtiHeapRootKind root);
+
+/**
+ * Return string representation of given heap root kind.
+ */
+const char* TranslateObjectRefKind(jvmtiObjectReferenceKind ref);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NSK_SHARE_JVMTI_JVMTITOOLS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_common/agent_common.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+#include "jvmti.h"
+#include "agent_common.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) {
+        return Agent_Initialize(jvm, options, reserved);
+}
+
+JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) {
+        return Agent_Initialize(jvm, options, reserved);
+}
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_common/agent_common.h	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+#ifndef NSK_JVMTI_AGENT_COMMON_DEFINED
+#define NSK_JVMTI_AGENT_COMMON_DEFINED
+
+#include "jvmti.h"
+#include "../jvmti_tools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved);
+
+JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved);
+
+jint Agent_Initialize(JavaVM *vm, char *options, void *reserved);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_tools.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,815 @@
+/*
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "native_thread.h"
+#include "jni_tools.h"
+#include "jvmti_tools.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ============================================================================= */
+
+/* Be careful: do not build shared library which will be linked with different
+ * agent libs while global variables are used
+ * Now the same source is used to build different agent libs, so these
+ * variables are not shared between agents */
+
+static jthread agentThread = NULL;
+static jvmtiStartFunction agentThreadProc = NULL;
+static void* agentThreadArg = NULL;
+
+
+typedef enum {NEW, RUNNABLE, WAITING, SUSPENDED, TERMINATED} thread_state_t;
+
+typedef struct agent_data_t {
+    volatile thread_state_t thread_state;
+    int last_debuggee_status;
+    jrawMonitorID monitor;
+} agent_data_t;
+
+static agent_data_t agent_data;
+
+static jvmtiEnv* jvmti_env = NULL;
+static JavaVM* jvm = NULL;
+static JNIEnv* jni_env = NULL;
+
+static volatile int currentAgentStatus = NSK_STATUS_PASSED;
+
+/* ============================================================================= */
+
+void nsk_jvmti_setFailStatus() {
+    currentAgentStatus = NSK_STATUS_FAILED;
+}
+
+int nsk_jvmti_isFailStatus() {
+    return (nsk_jvmti_getStatus() != NSK_STATUS_PASSED);
+}
+
+jint nsk_jvmti_getStatus() {
+    return currentAgentStatus;
+}
+
+/* ============================================================================= */
+static jvmtiError init_agent_data(jvmtiEnv *jvmti_env, agent_data_t *data) {
+    data->thread_state = NEW;
+    data->last_debuggee_status = NSK_STATUS_PASSED;
+
+    return NSK_CPP_STUB3(CreateRawMonitor, jvmti_env, "agent_data_monitor", &data->monitor);
+}
+
+/** Reset agent data to prepare for another run. */
+void nsk_jvmti_resetAgentData() {
+    rawMonitorEnter(jvmti_env, agent_data.monitor);
+    /* wait for agentThreadWrapper() to finish */
+    while (agent_data.thread_state != TERMINATED) {
+        rawMonitorWait(jvmti_env, agent_data.monitor, 10);
+    }
+    agent_data.thread_state = NEW;
+    agent_data.last_debuggee_status = NSK_STATUS_PASSED;
+    rawMonitorExit(jvmti_env, agent_data.monitor);
+}
+
+static jvmtiError free_agent_data(jvmtiEnv *jvmti_env, agent_data_t *data) {
+    return NSK_CPP_STUB2(DestroyRawMonitor, jvmti_env, data->monitor);
+}
+
+/** Create JVMTI environment. */
+jvmtiEnv* nsk_jvmti_createJVMTIEnv(JavaVM* javaVM, void* reserved) {
+    jvm = javaVM;
+    if (!NSK_VERIFY(
+            NSK_CPP_STUB3(GetEnv, javaVM, (void **)&jvmti_env, JVMTI_VERSION_1_1) == JNI_OK)) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    if (!NSK_JVMTI_VERIFY(init_agent_data(jvmti_env, &agent_data))) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    return jvmti_env;
+}
+
+/** Dispose JVMTI environment */
+static int nsk_jvmti_disposeJVMTIEnv(jvmtiEnv* jvmti_env) {
+    if (jvmti_env != NULL) {
+        if (!NSK_JVMTI_VERIFY(
+                NSK_CPP_STUB1(DisposeEnvironment, jvmti_env))) {
+            nsk_jvmti_setFailStatus();
+            return NSK_FALSE;
+        }
+
+        if (!NSK_JVMTI_VERIFY(free_agent_data(jvmti_env, &agent_data))) {
+            nsk_jvmti_setFailStatus();
+            return NSK_FALSE;
+        }
+    }
+    return NSK_TRUE;
+}
+
+/** Get JNI environment for agent thread. */
+JNIEnv* nsk_jvmti_getAgentJNIEnv() {
+    return jni_env;
+}
+
+/** Get JVMTI environment for agent */
+jvmtiEnv* nsk_jvmti_getAgentJVMTIEnv() {
+    return jvmti_env;
+}
+
+/* ============================================================================= */
+static void set_agent_thread_state(thread_state_t value) {
+    rawMonitorEnter(jvmti_env, agent_data.monitor);
+    agent_data.thread_state = value;
+    rawMonitorNotify(jvmti_env, agent_data.monitor);
+    rawMonitorExit(jvmti_env, agent_data.monitor);
+}
+
+/** Wrapper for user agent thread. */
+static void JNICALL
+agentThreadWrapper(jvmtiEnv* jvmti_env, JNIEnv* agentJNI, void* arg) {
+    jni_env = agentJNI;
+
+    /* run user agent proc */
+    {
+        set_agent_thread_state(RUNNABLE);
+
+        NSK_TRACE((*agentThreadProc)(jvmti_env, agentJNI, agentThreadArg));
+
+        set_agent_thread_state(TERMINATED);
+    }
+
+    /* finalize agent thread */
+    {
+        /* gelete global ref for agent thread */
+        NSK_CPP_STUB2(DeleteGlobalRef, agentJNI, agentThread);
+        agentThread = NULL;
+    }
+}
+
+/** Start wrapper for user agent thread. */
+static jthread startAgentThreadWrapper(JNIEnv *jni_env, jvmtiEnv* jvmti_env) {
+    const jint  THREAD_PRIORITY = JVMTI_THREAD_MAX_PRIORITY;
+    const char* THREAD_NAME = "JVMTI agent thread";
+    const char* THREAD_CLASS_NAME = "java/lang/Thread";
+    const char* THREAD_CTOR_NAME = "<init>";
+    const char* THREAD_CTOR_SIGNATURE = "(Ljava/lang/String;)V";
+
+    jobject threadName = NULL;
+    jclass threadClass = NULL;
+    jmethodID threadCtor = NULL;
+    jobject threadObject = NULL;
+    jobject threadGlobalRef = NULL;
+
+    if (!NSK_JNI_VERIFY(jni_env, (threadClass =
+            NSK_CPP_STUB2(FindClass, jni_env, THREAD_CLASS_NAME)) != NULL)) {
+        return NULL;
+    }
+
+    if (!NSK_JNI_VERIFY(jni_env, (threadCtor =
+            NSK_CPP_STUB4(GetMethodID, jni_env, threadClass, THREAD_CTOR_NAME, THREAD_CTOR_SIGNATURE)) != NULL))
+        return NULL;
+
+    if (!NSK_JNI_VERIFY(jni_env, (threadName =
+            NSK_CPP_STUB2(NewStringUTF, jni_env, THREAD_NAME)) != NULL))
+        return NULL;
+
+    if (!NSK_JNI_VERIFY(jni_env, (threadObject =
+            NSK_CPP_STUB4(NewObject, jni_env, threadClass, threadCtor, threadName)) != NULL))
+        return NULL;
+
+    if (!NSK_JNI_VERIFY(jni_env, (threadGlobalRef =
+            NSK_CPP_STUB2(NewGlobalRef, jni_env, threadObject)) != NULL)) {
+        NSK_CPP_STUB2(DeleteLocalRef, jni_env, threadObject);
+        return NULL;
+    }
+    agentThread = (jthread)threadGlobalRef;
+
+    if (!NSK_JVMTI_VERIFY(
+            NSK_CPP_STUB5(RunAgentThread, jvmti_env, agentThread,
+                            &agentThreadWrapper, agentThreadArg, THREAD_PRIORITY))) {
+        NSK_CPP_STUB2(DeleteGlobalRef, jni_env, threadGlobalRef);
+        NSK_CPP_STUB2(DeleteLocalRef, jni_env, threadObject);
+        return NULL;
+    }
+    return agentThread;
+}
+
+/** Register user agent thread with arg. */
+int nsk_jvmti_setAgentProc(jvmtiStartFunction proc, void* arg) {
+    agentThreadProc = proc;
+    agentThreadArg = arg;
+    return NSK_TRUE;
+}
+
+/** Get agent thread ref. */
+jthread nsk_jvmti_getAgentThread() {
+    return agentThread;
+}
+
+/** Run registered user agent thread via wrapper. */
+static jthread nsk_jvmti_runAgentThread(JNIEnv *jni_env, jvmtiEnv* jvmti_env) {
+    /* start agent thread wrapper */
+    jthread thread = startAgentThreadWrapper(jni_env, jvmti_env);
+    if (thread == NULL) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    return thread;
+}
+
+/* ============================================================================= */
+
+/** Sleep current thread. */
+void nsk_jvmti_sleep(jlong timeout) {
+    int seconds = (int)((timeout + 999) / 1000);
+    THREAD_sleep(seconds);
+}
+
+/** Sync point called from Java code. */
+static jint syncDebuggeeStatus(JNIEnv* jni_env, jvmtiEnv* jvmti_env, jint debuggeeStatus) {
+    jint result = NSK_STATUS_FAILED;
+
+    rawMonitorEnter(jvmti_env, agent_data.monitor);
+
+    /* save last debugee status */
+    agent_data.last_debuggee_status = debuggeeStatus;
+
+    /* we don't enter if-stmt in second call */
+    if (agent_data.thread_state == NEW) {
+        if (nsk_jvmti_runAgentThread(jni_env, jvmti_env) == NULL)
+            goto monitor_exit_and_return;
+
+        /* SP2.2-w - wait for agent thread */
+        while (agent_data.thread_state == NEW) {
+            rawMonitorWait(jvmti_env, agent_data.monitor, 0);
+        }
+    }
+
+    /* wait for sync permit */
+    /* we don't enter loop in first call */
+    while (agent_data.thread_state != WAITING && agent_data.thread_state != TERMINATED) {
+        /* SP4.2-w - second wait for agent thread */
+        rawMonitorWait(jvmti_env, agent_data.monitor, 0);
+    }
+
+    if (agent_data.thread_state != TERMINATED) {
+        agent_data.thread_state = SUSPENDED;
+        /* SP3.2-n - notify to start test */
+        /* SP6.2-n - notify to end test */
+        rawMonitorNotify(jvmti_env, agent_data.monitor);
+    }
+    else {
+        NSK_COMPLAIN0("Debuggee status sync aborted because agent thread has finished\n");
+        goto monitor_exit_and_return;
+    }
+
+    /* update status from debuggee */
+    if (debuggeeStatus != NSK_STATUS_PASSED) {
+        nsk_jvmti_setFailStatus();
+    }
+
+    while (agent_data.thread_state == SUSPENDED) {
+        /* SP5.2-w - wait while testing */
+        /* SP7.2 - wait for agent end */
+        rawMonitorWait(jvmti_env, agent_data.monitor, 0);
+    }
+
+    agent_data.last_debuggee_status = nsk_jvmti_getStatus();
+    result = agent_data.last_debuggee_status;
+
+monitor_exit_and_return:
+    rawMonitorExit(jvmti_env, agent_data.monitor);
+    return result;
+}
+
+/** Wait for sync point with Java code. */
+int nsk_jvmti_waitForSync(jlong timeout) {
+    static const int inc_timeout = 1000;
+
+    jlong t = 0;
+    int result = NSK_TRUE;
+
+    rawMonitorEnter(jvmti_env, agent_data.monitor);
+
+    agent_data.thread_state = WAITING;
+
+    /* SP2.2-n - notify agent is waiting and wait */
+    /* SP4.1-n - notify agent is waiting and wait */
+    rawMonitorNotify(jvmti_env, agent_data.monitor);
+
+    while (agent_data.thread_state == WAITING) {
+        /* SP3.2-w - wait to start test */
+        /* SP6.2-w - wait to end test */
+        rawMonitorWait(jvmti_env, agent_data.monitor, inc_timeout);
+
+        if (timeout == 0) continue;
+
+        t += inc_timeout;
+
+        if (t >= timeout) break;
+    }
+
+    if (agent_data.thread_state == WAITING) {
+        NSK_COMPLAIN1("No status sync occured for timeout: %"LL"d ms\n", timeout);
+        nsk_jvmti_setFailStatus();
+        result = NSK_FALSE;
+    }
+
+    rawMonitorExit(jvmti_env, agent_data.monitor);
+
+    return result;
+}
+
+/** Resume java code suspended on sync point. */
+int nsk_jvmti_resumeSync() {
+    int result;
+    rawMonitorEnter(jvmti_env, agent_data.monitor);
+
+    if (agent_data.thread_state == SUSPENDED) {
+        result = NSK_TRUE;
+        agent_data.thread_state = RUNNABLE;
+        /* SP5.2-n - notify suspend done */
+        /* SP7.2-n - notify agent end */
+        rawMonitorNotify(jvmti_env, agent_data.monitor);
+    }
+    else {
+        NSK_COMPLAIN0("Debuggee was not suspended on status sync\n");
+        nsk_jvmti_setFailStatus();
+        result = NSK_FALSE;
+    }
+
+    rawMonitorExit(jvmti_env, agent_data.monitor);
+    return NSK_TRUE;
+}
+
+/** Native function for Java code to provide sync point. */
+JNIEXPORT jint JNICALL
+Java_nsk_share_jvmti_DebugeeClass_checkStatus(JNIEnv* jni_env, jclass cls, jint debuggeeStatus) {
+    jint status;
+    NSK_TRACE(status = syncDebuggeeStatus(jni_env, jvmti_env, debuggeeStatus));
+    return status;
+}
+
+/** Native function for Java code to reset agent data. */
+JNIEXPORT void JNICALL
+Java_nsk_share_jvmti_DebugeeClass_resetAgentData(JNIEnv* jni_env, jclass cls) {
+    NSK_TRACE(nsk_jvmti_resetAgentData());
+}
+
+/* ============================================================================= */
+
+/** Find loaded class by signature. */
+jclass nsk_jvmti_classBySignature(const char signature[]) {
+    jclass* classes = NULL;
+    jint count = 0;
+    jclass foundClass = NULL;
+    int i;
+
+    if (!NSK_VERIFY(signature != NULL)) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    if (!NSK_JVMTI_VERIFY(
+            NSK_CPP_STUB3(GetLoadedClasses, jvmti_env, &count, &classes))) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    for (i = 0; i < count; i++) {
+        char* sig = NULL;
+        char* generic = NULL;
+
+        if (!NSK_JVMTI_VERIFY(
+                NSK_CPP_STUB4(GetClassSignature, jvmti_env, classes[i], &sig, &generic))) {
+            nsk_jvmti_setFailStatus();
+            break;
+        }
+
+        if (sig != NULL && strcmp(signature, sig) == 0) {
+            foundClass = classes[i];
+        }
+
+        if (!(NSK_JVMTI_VERIFY(
+                    NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)sig))
+                && NSK_JVMTI_VERIFY(
+                    NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)generic)))) {
+            nsk_jvmti_setFailStatus();
+            break;
+        }
+
+        if (foundClass != NULL)
+            break;
+    }
+
+    if (!NSK_JVMTI_VERIFY(
+                NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)classes))) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    if (!NSK_JNI_VERIFY(jni_env, (foundClass = (jclass)
+                NSK_CPP_STUB2(NewGlobalRef, jni_env, foundClass)) != NULL)) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    return foundClass;
+}
+
+/** Find alive thread by name. */
+jthread nsk_jvmti_threadByName(const char name[]) {
+    jthread* threads = NULL;
+    jint count = 0;
+    jthread foundThread = NULL;
+    int i;
+
+    if (!NSK_VERIFY(name != NULL)) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    if (!NSK_JVMTI_VERIFY(
+            NSK_CPP_STUB3(GetAllThreads, jvmti_env, &count, &threads))) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    for (i = 0; i < count; i++) {
+        jvmtiThreadInfo info;
+
+        if (!NSK_JVMTI_VERIFY(
+                NSK_CPP_STUB3(GetThreadInfo, jvmti_env, threads[i], &info))) {
+            nsk_jvmti_setFailStatus();
+            break;
+        }
+
+        if (info.name != NULL && strcmp(name, info.name) == 0) {
+            foundThread = threads[i];
+            break;
+        }
+    }
+
+    if (!NSK_JVMTI_VERIFY(
+                NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)threads))) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    if (!NSK_JNI_VERIFY(jni_env, (foundThread = (jthread)
+                NSK_CPP_STUB2(NewGlobalRef, jni_env, foundThread)) != NULL)) {
+        nsk_jvmti_setFailStatus();
+        return NULL;
+    }
+
+    return foundThread;
+}
+
+
+/* ============================================================================= */
+
+/** Add all capabilities for finding line locations. */
+int nsk_jvmti_addLocationCapabilities() {
+    jvmtiCapabilities caps;
+
+    memset(&caps, 0, sizeof(caps));
+    caps.can_get_line_numbers = 1;
+    if (!NSK_JVMTI_VERIFY(
+            NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps)))
+        return NSK_FALSE;
+
+    return NSK_TRUE;
+}
+
+/** Add all capabilities for using breakpoints. */
+int nsk_jvmti_addBreakpointCapabilities() {
+    jvmtiCapabilities caps;
+
+    if (!nsk_jvmti_addLocationCapabilities())
+        return NSK_FALSE;
+
+    memset(&caps, 0, sizeof(caps));
+    caps.can_generate_breakpoint_events = 1;
+    if (!NSK_JVMTI_VERIFY(
+            NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps)))
+        return NSK_FALSE;
+
+    return NSK_TRUE;
+}
+
+/** Find line location. */
+jlocation nsk_jvmti_getLineLocation(jclass cls, jmethodID method, int line) {
+    jint count = 0;
+    jvmtiLineNumberEntry* table = NULL;
+    jlocation location = NSK_JVMTI_INVALID_JLOCATION;
+    int i;
+
+    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB4(GetLineNumberTable, jvmti_env, method, &count, &table)))
+        return NSK_JVMTI_INVALID_JLOCATION;
+
+    for (i = 0; i < count; i++) {
+        if (table[i].line_number == line) {
+            location = table[i].start_location;
+            break;
+        }
+    }
+
+    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)table)))
+        return NSK_JVMTI_INVALID_JLOCATION;
+
+    return location;
+}
+
+/** Set breakpoint to a line. */
+jlocation nsk_jvmti_setLineBreakpoint(jclass cls, jmethodID method, int line) {
+    jlocation location = NSK_JVMTI_INVALID_JLOCATION;
+
+    if (!NSK_VERIFY((location =
+            nsk_jvmti_getLineLocation(cls, method, line)) != NSK_JVMTI_INVALID_JLOCATION))
+        return NSK_JVMTI_INVALID_JLOCATION;
+
+    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetBreakpoint, jvmti_env, method, location)))
+        return NSK_JVMTI_INVALID_JLOCATION;
+
+    return location;
+}
+
+/** Remove breakpoint from a line. */
+jlocation nsk_jvmti_clearLineBreakpoint(jclass cls, jmethodID method, int line) {
+    jlocation location = NSK_JVMTI_INVALID_JLOCATION;
+
+    if (!NSK_VERIFY((location =
+            nsk_jvmti_getLineLocation(cls, method, line)) != NSK_JVMTI_INVALID_JLOCATION))
+        return NSK_JVMTI_INVALID_JLOCATION;
+
+    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(ClearBreakpoint, jvmti_env, method, location)))
+        return NSK_JVMTI_INVALID_JLOCATION;
+
+    return location;
+}
+
+/* ============================================================================= */
+
+/** Enable or disable given events. */
+int nsk_jvmti_enableEvents(jvmtiEventMode enable, int size, jvmtiEvent list[], jthread thread) {
+    int i;
+
+    for (i = 0; i < size; i++) {
+        if (!NSK_JVMTI_VERIFY(
+                NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, enable,
+                                                list[i], thread))) {
+            nsk_jvmti_setFailStatus();
+            return NSK_FALSE;
+        }
+    }
+    return NSK_TRUE;
+}
+
+/* ============================================================================= */
+
+typedef jint (JNICALL *checkStatus_type)(JNIEnv* jni_env, jclass cls, jint debuggeeStatus);
+
+static checkStatus_type checkStatus_func = NULL;
+
+/**
+ * Proxy function to gain sequential access to checkStatus of each agent
+ */
+JNIEXPORT jint JNICALL
+MA_checkStatus(JNIEnv* jni_env, jclass cls, jint debuggeeStatus) {
+    jint status;
+
+    NSK_TRACE(status = syncDebuggeeStatus(jni_env, jvmti_env, debuggeeStatus));
+    return (*checkStatus_func)(jni_env, cls, status);
+}
+
+/**
+ * nativeMethodBind callback:
+ *      if needed, redirects checkStatus native method call
+ */
+static void JNICALL nativeMethodBind(jvmtiEnv* jvmti_env, JNIEnv *jni_env,
+                              jthread thread, jmethodID mid,
+                              void* address, void** new_address_ptr) {
+    const char* BIND_CLASS_NAME = "Lnsk/share/jvmti/DebugeeClass;";
+    const char* BIND_METHOD_NAME = "checkStatus";
+    const char* BIND_METHOD_SIGNATURE = "(I)I";
+
+    jvmtiPhase phase;
+    jclass cls;
+    char *class_sig = NULL;
+    char *name = NULL;
+    char *sig = NULL;
+
+    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(GetPhase, jvmti_env, &phase))) {
+        nsk_jvmti_setFailStatus();
+        return;
+    }
+
+    if (phase != JVMTI_PHASE_START && phase != JVMTI_PHASE_LIVE)
+        return;
+
+    if (NSK_JVMTI_VERIFY(
+            NSK_CPP_STUB5(GetMethodName, jvmti_env, mid, &name, &sig, NULL))) {
+        if (strcmp(name, BIND_METHOD_NAME) == 0 &&
+                strcmp(sig, BIND_METHOD_SIGNATURE) == 0) {
+
+            if (NSK_JVMTI_VERIFY(
+                    NSK_CPP_STUB3(GetMethodDeclaringClass, jvmti_env, mid, &cls))
+             && NSK_JVMTI_VERIFY(
+                    NSK_CPP_STUB4(GetClassSignature, jvmti_env, cls, &class_sig, NULL))
+             && strcmp(class_sig, BIND_CLASS_NAME) == 0
+             && address != (void*)Java_nsk_share_jvmti_DebugeeClass_checkStatus) {
+                checkStatus_func = (checkStatus_type)address;
+                NSK_TRACE(*new_address_ptr = (void*)MA_checkStatus);
+            }
+        }
+    }
+
+    if (name != NULL)
+        NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)name);
+
+    if (sig != NULL)
+        NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)sig);
+
+    if (class_sig != NULL)
+        NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)class_sig);
+}
+
+/**
+ * Initialize multiple agent:
+ *      establish processing of nativeMethodBind events
+ */
+int nsk_jvmti_init_MA(jvmtiEventCallbacks* callbacks) {
+
+    if (callbacks == NULL) {
+        NSK_COMPLAIN0("callbacks should not be NULL\n");
+        nsk_jvmti_setFailStatus();
+        return NSK_FALSE;
+    }
+
+    if (callbacks->NativeMethodBind != NULL) {
+        NSK_COMPLAIN0("callbacks.NativeMethodBind should be NULL\n");
+        nsk_jvmti_setFailStatus();
+        return NSK_FALSE;
+    }
+
+    {
+        jvmtiCapabilities caps;
+        memset(&caps, 0, sizeof(caps));
+        caps.can_generate_native_method_bind_events = 1;
+        if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps)))
+            return NSK_FALSE;
+    }
+
+    callbacks->NativeMethodBind = nativeMethodBind;
+    if (!NSK_JVMTI_VERIFY(
+            NSK_CPP_STUB3(SetEventCallbacks, jvmti_env, callbacks,
+                sizeof(jvmtiEventCallbacks))))
+        return NSK_FALSE;
+
+    if (!NSK_JVMTI_VERIFY(
+            NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, JVMTI_ENABLE,
+                JVMTI_EVENT_NATIVE_METHOD_BIND, NULL)))
+        return NSK_FALSE;
+
+    return NSK_TRUE;
+}
+
+/* ============================================================================= */
+
+int nsk_jvmti_isOptionalEvent(jvmtiEvent event) {
+
+    return (event == JVMTI_EVENT_EXCEPTION)
+        || (event == JVMTI_EVENT_EXCEPTION_CATCH)
+        || (event == JVMTI_EVENT_SINGLE_STEP)
+        || (event == JVMTI_EVENT_FRAME_POP)
+        || (event == JVMTI_EVENT_BREAKPOINT)
+        || (event == JVMTI_EVENT_FIELD_ACCESS)
+        || (event == JVMTI_EVENT_FIELD_MODIFICATION)
+        || (event == JVMTI_EVENT_METHOD_ENTRY)
+        || (event == JVMTI_EVENT_METHOD_EXIT)
+        || (event == JVMTI_EVENT_NATIVE_METHOD_BIND)
+        || (event == JVMTI_EVENT_COMPILED_METHOD_LOAD)
+        || (event == JVMTI_EVENT_COMPILED_METHOD_UNLOAD)
+        || (event == JVMTI_EVENT_MONITOR_WAIT)
+        || (event == JVMTI_EVENT_MONITOR_WAITED)
+        || (event == JVMTI_EVENT_MONITOR_CONTENDED_ENTER)
+        || (event == JVMTI_EVENT_MONITOR_CONTENDED_ENTERED)
+        || (event == JVMTI_EVENT_GARBAGE_COLLECTION_START)
+        || (event == JVMTI_EVENT_GARBAGE_COLLECTION_FINISH)
+        || (event == JVMTI_EVENT_OBJECT_FREE)
+        || (event == JVMTI_EVENT_VM_OBJECT_ALLOC);
+}
+
+/* ============================================================================= */
+
+void nsk_jvmti_showPossessedCapabilities(jvmtiEnv *jvmti_env) {
+
+    jvmtiCapabilities caps;
+
+    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(GetCapabilities, jvmti_env, &caps))) {
+        return;
+    }
+
+    NSK_DISPLAY0("\n");
+    NSK_DISPLAY0("Possessed capabilities:\n");
+    NSK_DISPLAY0("-----------------------\n");
+    if (caps.can_tag_objects)
+        NSK_DISPLAY0("\tcan_tag_objects\n");
+    if (caps.can_generate_field_modification_events)
+        NSK_DISPLAY0("\tcan_generate_field_modification_events\n");
+    if (caps.can_generate_field_access_events)
+        NSK_DISPLAY0("\tcan_generate_field_access_events\n");
+    if (caps.can_get_bytecodes)
+        NSK_DISPLAY0("\tcan_get_bytecodes\n");
+    if (caps.can_get_synthetic_attribute)
+        NSK_DISPLAY0("\tcan_get_synthetic_attribute\n");
+    if (caps.can_get_owned_monitor_info)
+        NSK_DISPLAY0("\tcan_get_owned_monitor_info\n");
+    if (caps.can_get_current_contended_monitor)
+        NSK_DISPLAY0("\tcan_get_current_contended_monitor\n");
+    if (caps.can_get_monitor_info)
+        NSK_DISPLAY0("\tcan_get_monitor_info\n");
+    if (caps.can_pop_frame)
+        NSK_DISPLAY0("\tcan_pop_frame\n");
+    if (caps.can_redefine_classes)
+        NSK_DISPLAY0("\tcan_redefine_classes\n");
+    if (caps.can_signal_thread)
+        NSK_DISPLAY0("\tcan_signal_thread\n");
+    if (caps.can_get_source_file_name)
+        NSK_DISPLAY0("\tcan_get_source_file_name\n");
+    if (caps.can_get_line_numbers)
+        NSK_DISPLAY0("\tcan_get_line_numbers\n");
+    if (caps.can_get_source_debug_extension)
+        NSK_DISPLAY0("\tcan_get_source_debug_extension\n");
+    if (caps.can_access_local_variables)
+        NSK_DISPLAY0("\tcan_access_local_variables\n");
+    if (caps.can_maintain_original_method_order)
+        NSK_DISPLAY0("\tcan_maintain_original_method_order\n");
+    if (caps.can_generate_single_step_events)
+        NSK_DISPLAY0("\tcan_generate_single_step_events\n");
+    if (caps.can_generate_exception_events)
+        NSK_DISPLAY0("\tcan_generate_exception_events\n");
+    if (caps.can_generate_frame_pop_events)
+        NSK_DISPLAY0("\tcan_generate_frame_pop_events\n");
+    if (caps.can_generate_breakpoint_events)
+        NSK_DISPLAY0("\tcan_generate_breakpoint_events\n");
+    if (caps.can_suspend)
+        NSK_DISPLAY0("\tcan_suspend\n");
+    if (caps.can_get_current_thread_cpu_time)
+        NSK_DISPLAY0("\tcan_get_current_thread_cpu_time\n");
+    if (caps.can_get_thread_cpu_time)
+        NSK_DISPLAY0("\tcan_get_thread_cpu_time\n");
+    if (caps.can_generate_method_entry_events)
+        NSK_DISPLAY0("\tcan_generate_method_entry_events\n");
+    if (caps.can_generate_method_exit_events)
+        NSK_DISPLAY0("\tcan_generate_method_exit_events\n");
+    if (caps.can_generate_all_class_hook_events)
+        NSK_DISPLAY0("\tcan_generate_all_class_hook_events\n");
+    if (caps.can_generate_compiled_method_load_events)
+        NSK_DISPLAY0("\tcan_generate_compiled_method_load_events\n");
+    if (caps.can_generate_monitor_events)
+        NSK_DISPLAY0("\tcan_generate_monitor_events\n");
+    if (caps.can_generate_vm_object_alloc_events)
+        NSK_DISPLAY0("\tcan_generate_vm_object_alloc_events\n");
+    if (caps.can_generate_native_method_bind_events)
+        NSK_DISPLAY0("\tcan_generate_native_method_bind_events\n");
+    if (caps.can_generate_garbage_collection_events)
+        NSK_DISPLAY0("\tcan_generate_garbage_collection_events\n");
+    if (caps.can_generate_object_free_events)
+        NSK_DISPLAY0("\tcan_generate_object_free_events\n");
+
+    NSK_DISPLAY0("\n");
+}
+
+/* ============================================================================= */
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_FollowRefObjects.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,397 @@
+/*
+ * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <string.h>
+#include <jvmti.h>
+#include "jni_tools.h"
+#include "jvmti_tools.h"
+#include "jvmti_FollowRefObjects.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ============================================================================= */
+
+int g_fakeUserData = 0;
+int g_userDataError = 0;
+jvmtiHeapCallbacks g_wrongHeapCallbacks = { 0 };
+
+/* This array has to be up-to-date with the jvmtiHeapReferenceKind enum */
+const char * const g_refKindStr[28] = {
+   "unknown_0",
+   "JVMTI_HEAP_REFERENCE_CLASS",
+   "JVMTI_HEAP_REFERENCE_FIELD",
+   "JVMTI_HEAP_REFERENCE_ARRAY_ELEMENT",
+   "JVMTI_HEAP_REFERENCE_CLASS_LOADER",
+   "JVMTI_HEAP_REFERENCE_SIGNERS",
+   "JVMTI_HEAP_REFERENCE_PROTECTION_DOMAIN",
+   "JVMTI_HEAP_REFERENCE_INTERFACE",
+   "JVMTI_HEAP_REFERENCE_STATIC_FIELD",
+   "JVMTI_HEAP_REFERENCE_CONSTANT_POOL",
+   "JVMTI_HEAP_REFERENCE_SUPERCLASS",
+   "unknown_11", "unknown_12", "unknown_13", "unknown_14", "unknown_15",
+   "unknown_16", "unknown_17", "unknown_18", "unknown_19", "unknown_20",
+   "JVMTI_HEAP_REFERENCE_JNI_GLOBAL",
+   "JVMTI_HEAP_REFERENCE_SYSTEM_CLASS",
+   "JVMTI_HEAP_REFERENCE_MONITOR",
+   "JVMTI_HEAP_REFERENCE_STACK_LOCAL",
+   "JVMTI_HEAP_REFERENCE_JNI_LOCAL",
+   "JVMTI_HEAP_REFERENCE_THREAD",
+   "JVMTI_HEAP_REFERENCE_OTHER"
+};
+
+/* ============================================================================= */
+
+char * g_szTagInfo[MAX_TAG];
+char g_tagFlags[MAX_TAG];
+int g_tagVisitCount[MAX_TAG];
+
+/* ============================================================================= */
+
+void markTagSet(jlong tag_val)
+{
+    if ( tag_val > 0 && tag_val < MAX_TAG )
+        g_tagFlags[tag_val] |= FLAG_TAG_SET;
+}
+
+void markTagVisited(jlong tag_val)
+{
+    if ( tag_val > 0 && tag_val < MAX_TAG ) {
+        g_tagVisitCount[tag_val]++;
+    }
+}
+
+jboolean checkThatAllTagsVisited()
+{
+    jboolean ok = JNI_TRUE;
+    jlong i;
+
+    NSK_DISPLAY0("Checking that all set tags have been visited\n");
+
+    for ( i = 1; i < MAX_TAG; i++ ) {
+        char flags = g_tagFlags[i];
+
+        if ( (g_tagFlags[i] & FLAG_TAG_SET) ) {
+            if ( g_tagVisitCount[i] == 0 ) {
+                NSK_COMPLAIN1("Tag %" LL "d has not been visited: %x\n", i);
+                ok = JNI_FALSE;
+            }
+
+            DBG(printf(">>> Tag %" LL "d has been visited %i times: %s\n", i, g_tagVisitCount[i], g_szTagInfo[i]));
+        }
+    }
+
+    return ok;
+}
+
+JNIEXPORT void JNICALL Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_resetTags(JNIEnv* jni, jclass klass)
+{
+    memset(g_szTagInfo, 0, sizeof(g_szTagInfo));
+    memset(g_tagFlags, 0, sizeof(g_tagFlags));
+    memset(g_tagVisitCount, 0, sizeof(g_tagVisitCount));
+}
+
+JNIEXPORT jboolean JNICALL Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_setTag(JNIEnv* jni, jclass klass, jobject o, jlong tag, jstring sInfo)
+{
+    jvmtiEnv * jvmti = nsk_jvmti_getAgentJVMTIEnv();
+    jint hashCode;
+
+    if ( ! NSK_VERIFY(NSK_CPP_STUB3(SetTag, jvmti, o, tag) == JVMTI_ERROR_NONE) ) {
+        NSK_COMPLAIN2("Can't set tag %li for object %lx\n", tag, o);
+        return JNI_FALSE;
+    }
+
+    if ( ! NSK_VERIFY(NSK_CPP_STUB3(GetObjectHashCode, jvmti, o, &hashCode) == JVMTI_ERROR_NONE) ) {
+        NSK_COMPLAIN1("Can't get hash object %lx\n", o);
+        return JNI_FALSE;
+    }
+
+    NSK_DISPLAY2("setTag: %08x <- % 3li", hashCode, tag);
+
+    if ( tag > 0 && tag < MAX_TAG ) {
+        jboolean fCopy;
+        const char * s;
+
+        if ( ! NSK_VERIFY((s = NSK_CPP_STUB3(GetStringUTFChars, jni, sInfo, &fCopy)) != NULL) ) {
+            NSK_COMPLAIN1("Can't get string at %#p\n", sInfo);
+            return JNI_FALSE;
+        }
+
+        if ( ! s ) {
+            NSK_COMPLAIN1("Can't get string at %#p: NULL\n", sInfo);
+            return JNI_FALSE;
+        }
+
+        g_szTagInfo[tag] = strdup(s);
+
+        NSK_CPP_STUB3(ReleaseStringUTFChars, jni, sInfo, s);
+
+        NSK_DISPLAY1(" // %s", g_szTagInfo[tag]);
+
+    }
+
+    markTagSet(tag);
+
+    return JNI_TRUE;
+}
+
+JNIEXPORT jlong JNICALL Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_getTag(JNIEnv* jni, jclass klass, jobject o)
+{
+    jvmtiEnv * jvmti = nsk_jvmti_getAgentJVMTIEnv();
+
+    jlong tag;
+    jvmtiError r;
+    if ( ! NSK_VERIFY((r = NSK_CPP_STUB3(GetTag, jvmti, o, &tag)) == JVMTI_ERROR_NONE) ) {
+        NSK_COMPLAIN2("Can't GetTag for object %lx. Return code: %i\n", o, r);
+        return -1;
+    }
+
+    return tag;
+}
+
+/* ============================================================================= */
+
+int g_refsToVerifyCnt;
+
+RefToVerify g_refsToVerify[MAX_REFS];
+
+/* ============================================================================= */
+
+JNIEXPORT void JNICALL Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_resetRefsToVerify(JNIEnv* jni, jclass klass)
+{
+    g_refsToVerifyCnt = 0;
+}
+
+static RefToVerify * findRefToVerify(jlong tagFrom, jlong tagTo, jint refKind)
+{
+    int i;
+    RefToVerify * pRefRec = g_refsToVerify;
+
+    for ( i = g_refsToVerifyCnt; i > 0; i--, pRefRec++ ) {
+        pRefRec = &g_refsToVerify[i];
+        if ( pRefRec->_tagFrom == tagFrom && pRefRec->_tagTo == tagTo && pRefRec->_refKind == refKind ) {
+            return pRefRec;
+        }
+    }
+
+    return NULL;
+}
+
+static jboolean addRefToVerify(jlong tagFrom, jlong tagTo, jint refKind, int expectedCount, int actualCount)
+{
+    RefToVerify * pRefRec;
+
+    if ( g_refsToVerifyCnt >= MAX_REFS ) {
+        NSK_COMPLAIN0("TEST_BUG: Max. number of refs reached!");
+        nsk_jvmti_setFailStatus();
+        return JNI_FALSE;
+    }
+
+    pRefRec = &g_refsToVerify[g_refsToVerifyCnt++];
+
+    pRefRec->_tagFrom = tagFrom;
+    pRefRec->_tagTo = tagTo;
+    pRefRec->_refKind = refKind;
+    pRefRec->_expectedCount = expectedCount;
+    pRefRec->_actualCount = actualCount;
+
+    return JNI_TRUE;
+}
+
+JNIEXPORT jboolean JNICALL Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_addRefToVerify(JNIEnv* jni, jclass klass, jobject from, jobject to, jint refKind, jint count)
+{
+    jvmtiEnv * jvmti = nsk_jvmti_getAgentJVMTIEnv();
+    jvmtiError r;
+    jlong tagFrom, tagTo;
+    RefToVerify * pRefRec;
+
+    if ( ! NSK_VERIFY((r = NSK_CPP_STUB3(GetTag, jvmti, from, &tagFrom)) == JVMTI_ERROR_NONE) ) {
+        NSK_COMPLAIN2("TEST_BUG: Can't GetTag for object %lx. Return code: %i\n", from, r);
+        nsk_jvmti_setFailStatus();
+        return JNI_FALSE;
+    }
+
+
+    if ( ! NSK_VERIFY((r = NSK_CPP_STUB3(GetTag, jvmti, to, &tagTo)) == JVMTI_ERROR_NONE) ) {
+        NSK_COMPLAIN2("TEST_BUG: Can't GetTag for object %lx. Return code: %i\n", to, r);
+        nsk_jvmti_setFailStatus();
+        return JNI_FALSE;
+    }
+
+    if ( (pRefRec = findRefToVerify(tagFrom, tagTo, refKind)) != NULL ) {
+        pRefRec->_expectedCount += count;
+        return JNI_TRUE;
+    }
+
+    return addRefToVerify(tagFrom, tagTo, refKind, count, 0);
+}
+
+jboolean markRefToVerify(jlong tagFrom, jlong tagTo, int refKind)
+{
+    RefToVerify * pRefRec;
+
+    if ( (pRefRec = findRefToVerify(tagFrom, tagTo, refKind)) != NULL ) {
+        pRefRec->_actualCount++;
+        return JNI_TRUE;
+    }
+
+    return addRefToVerify(tagFrom, tagTo, refKind, 0, 1);
+}
+
+/* ============================================================================= */
+
+void checkUserData(const char * szFile, const int line, void * user_data)
+{
+    if (user_data != &g_fakeUserData && !g_userDataError) {
+       NSK_COMPLAIN4("%s, %i: Unexpected user_data is passed"
+                     " to heapReferenceCallback:\n"
+                      "   expected:       0x%p\n"
+                      "   actual:         0x%p\n",
+                      szFile, line,
+                      &g_fakeUserData,
+                      user_data);
+        g_userDataError++;
+    }
+}
+
+#define CHECK_USER_DATA(p) checkUserData(__FILE__, __LINE__, (p))
+
+void printHeapRefCallbackInfo(
+     jvmtiHeapReferenceKind        reference_kind,
+     const jvmtiHeapReferenceInfo* reference_info,
+     jlong                         class_tag,
+     jlong                         referrer_class_tag,
+     jlong                         size,
+     jlong*                        tag_ptr,
+     jlong*                        referrer_tag_ptr,
+     jint                          length)
+{
+    const char * szInfo, * szRefInfo;
+    jlong tag_val = tag_ptr ? *tag_ptr : 0;
+
+    NSK_DISPLAY1("heapReferenceCallback: %s", g_refKindStr[reference_kind]);
+
+    NSK_DISPLAY3("   reference_info: %#lx, class_tag: %#" LL "d, referrer_class_tag: %#" LL "d\n",
+                     reference_info,       class_tag,            referrer_class_tag);
+
+    NSK_DISPLAY4("   size: %" LL "d, tag_ptr: %p,  referrer_tag_ptr: %p,  length: %-ld\n",
+                     size,           tag_ptr,      referrer_tag_ptr,      length);
+
+    NSK_DISPLAY2("   tag: %" LL "d, referrer_tag: %" LL "d\n",
+                     tag_val, DEREF(referrer_tag_ptr));
+
+    szInfo = ( tag_val > 0 && tag_val < MAX_TAG ) ? g_szTagInfo[tag_val] : "<none>";
+    szRefInfo = ( referrer_tag_ptr && *referrer_tag_ptr > 0 && *referrer_tag_ptr < MAX_TAG ) ? g_szTagInfo[*referrer_tag_ptr] : "<none>";
+
+    NSK_DISPLAY3("   summary: %s: %s <- %s\n",
+                     g_refKindStr[reference_kind], szInfo, szRefInfo);
+}
+
+/* ============================================================================= */
+
+jint JNICALL wrongHeapReferenceCallback(
+     jvmtiHeapReferenceKind        reference_kind,
+     const jvmtiHeapReferenceInfo* reference_info,
+     jlong                         class_tag,
+     jlong                         referrer_class_tag,
+     jlong                         size,
+     jlong*                        tag_ptr,
+     jlong*                        referrer_tag_ptr,
+     jint                          length,
+     void*                         user_data)
+{
+    CHECK_USER_DATA(user_data);
+    NSK_COMPLAIN0("heap reference callback was called, where it should not be\n");
+    nsk_jvmti_setFailStatus();
+    printHeapRefCallbackInfo(reference_kind, reference_info, class_tag, referrer_class_tag, size, tag_ptr, referrer_tag_ptr, length);
+
+    return JVMTI_VISIT_OBJECTS;
+}
+
+jint JNICALL wrongPrimitiveFieldCallback(
+     jvmtiHeapReferenceKind        reference_kind,
+     const jvmtiHeapReferenceInfo* reference_info,
+     jlong                         class_tag,
+     jlong*                        tag_ptr,
+     jvalue                        value,
+     jvmtiPrimitiveType            value_type,
+     void*                         user_data)
+{
+    CHECK_USER_DATA(user_data);
+    NSK_COMPLAIN0("primitive field callback was called, where it should not be\n");
+    nsk_jvmti_setFailStatus();
+
+    return JVMTI_VISIT_OBJECTS;
+}
+
+jint JNICALL wrongArrayPrimitiveValueCallback(
+     jlong              class_tag,
+     jlong              size,
+     jlong*             tag_ptr,
+     jint               element_count,
+     jvmtiPrimitiveType element_type,
+     const void*        elements,
+     void*              user_data)
+{
+    CHECK_USER_DATA(user_data);
+    NSK_COMPLAIN0("array primitive value callback was called, where it should not be\n");
+    nsk_jvmti_setFailStatus();
+
+    return JVMTI_VISIT_OBJECTS;
+}
+
+jint JNICALL wrongStringPrimitiveValueCallback(
+     jlong        class_tag,
+     jlong        size,
+     jlong*       tag_ptr,
+     const jchar* value,
+     jint         value_length,
+     void*        user_data)
+{
+    CHECK_USER_DATA(user_data);
+    NSK_COMPLAIN0("string primitive value callback was called, where it should not be\n");
+    nsk_jvmti_setFailStatus();
+
+    return JVMTI_VISIT_OBJECTS;
+}
+
+/* ============================================================================= */
+
+void jvmti_FollowRefObject_init()
+{
+    g_wrongHeapCallbacks.heap_iteration_callback         = NULL;
+    g_wrongHeapCallbacks.heap_reference_callback         = wrongHeapReferenceCallback;
+    g_wrongHeapCallbacks.primitive_field_callback        = wrongPrimitiveFieldCallback;
+    g_wrongHeapCallbacks.array_primitive_value_callback  = wrongArrayPrimitiveValueCallback;
+    g_wrongHeapCallbacks.string_primitive_value_callback = wrongStringPrimitiveValueCallback;
+
+    Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_resetTags(NULL, NULL);
+    Java_nsk_jvmti_unit_FollowReferences_FollowRefObjects_resetRefsToVerify(NULL, NULL);
+}
+
+/* ============================================================================= */
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_FollowRefObjects.h	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+#ifndef __FollowRefObject_h
+#define __FollowRefObject_h
+
+#include <jvmti.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ============================================================================= */
+
+void jvmti_FollowRefObject_init();
+
+/* ============================================================================= */
+
+#define DBG(x) x
+#define DEREF(ptr) (((ptr) == NULL ? 0 : *(ptr)))
+
+extern jvmtiHeapCallbacks g_wrongHeapCallbacks; /* Callbacks that blame */
+
+extern const char * const g_refKindStr[28]; /* JVMTI_HEAP_REFERENCE_xxx */
+
+/* ============================================================================= */
+
+#define MAX_TAG 1000
+#define MAX_REFS (MAX_TAG * 3)
+
+#define FLAG_TAG_SET      0x01
+
+extern char * g_szTagInfo[MAX_TAG];
+extern char g_tagFlags[MAX_TAG];
+extern int g_tagVisitCount[MAX_TAG];
+
+void markTagSet(jlong tag_val);
+void markTagVisited(jlong tag_val);
+
+jboolean checkThatAllTagsVisited();
+
+/* ============================================================================= */
+
+typedef struct {
+
+    jlong _tagFrom,
+          _tagTo;
+
+    jint  _refKind;
+
+    int   _expectedCount,
+          _actualCount;
+
+} RefToVerify;
+
+extern int g_refsToVerifyCnt;
+
+extern RefToVerify g_refsToVerify[MAX_REFS];
+
+jboolean markRefToVerify(jlong tagFrom, jlong tagTo, int refKind);
+
+/* ============================================================================= */
+
+extern int g_fakeUserData;
+extern int g_userDataError;
+
+#define CHECK_USER_DATA(p) checkUserData(__FILE__, __LINE__, (p))
+
+void checkUserData(const char * szFile, const int line, void * user_data);
+
+/* ============================================================================= */
+
+void printHeapRefCallbackInfo(
+     jvmtiHeapReferenceKind        reference_kind,
+     const jvmtiHeapReferenceInfo* reference_info,
+     jlong                         class_tag,
+     jlong                         referrer_class_tag,
+     jlong                         size,
+     jlong*                        tag_ptr,
+     jlong*                        referrer_tag_ptr,
+     jint                          length);
+
+/* ============================================================================= */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_tools.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,684 @@
+/*
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+
+/*************************************************************/
+
+#include "jvmti.h"
+
+/*************************************************************/
+
+#include "nsk_tools.h"
+#include "jni_tools.h"
+#include "jvmti_tools.h"
+#include "JVMTITools.h"
+
+/*************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*************************************************************/
+
+#define NSK_JVMTI_WAITTIME 2
+
+#define NSK_JVMTI_MAX_OPTIONS       10
+#define NSK_JVMTI_OPTION_START      '-'
+#define NSK_JVMTI_OPTION_VAL_SEP    '='
+
+#define NSK_JVMTI_OPT_PATH_TO_NEW_BYTE_CODE "pathToNewByteCode"
+#define PATH_FORMAT "%s%02d/%s"
+#define DIR_NAME "newclass"
+
+static volatile int redefineAttempted = NSK_FALSE;
+static volatile int redefineSucceed = NSK_FALSE;
+static volatile int agentFailed = NSK_FALSE;
+
+static struct {
+    struct {
+        int count;
+        char* names[NSK_JVMTI_MAX_OPTIONS];
+        char* values[NSK_JVMTI_MAX_OPTIONS];
+        char* string;
+    } options;
+    int waittime;
+} context;
+
+/*************************************************************/
+
+static int check_option(int dashed, const char name[], const char value[]) {
+    if (strcmp("verbose", name) == 0) {
+        if (strlen(value) > 0) {
+            nsk_complain("nsk_jvmti_parseOptions(): unexpected value in option: %s=%s\n", name, value);
+            return NSK_FALSE;
+        }
+        nsk_setVerboseMode(NSK_TRUE);
+    } else if (strcmp("trace", name) == 0) {
+        if (strlen(value) <= 0) {
+            nsk_complain("nsk_jvmti_parseOptions(): no value for option: %s\n", name);
+            return NSK_FALSE;
+        }
+        if (strcmp("none", value) == 0) {
+            nsk_setTraceMode(NSK_TRACE_NONE);
+        } else if (strcmp("before", value) == 0) {
+            nsk_setTraceMode(NSK_TRACE_BEFORE);
+        } else if (strcmp("after", value) == 0) {
+            nsk_setTraceMode(NSK_TRACE_AFTER);
+        } else if (strcmp("all", value) == 0) {
+            nsk_setTraceMode(NSK_TRACE_ALL);
+        } else {
+            nsk_complain("nsk_jvmti_parseOptions(): uexpected value in option: %s=%s\n", name, value);
+            return NSK_FALSE;
+        }
+        nsk_setVerboseMode(NSK_TRUE);
+    } else if (strcmp("waittime", name) == 0) {
+        if (strlen(value) <= 0) {
+            nsk_complain("nsk_jvmti_parseOptions(): no value for option: %s\n", name);
+            return NSK_FALSE;
+        }
+        {
+            char* end = NULL;
+            long n = strtol(value, &end, 10);
+            if (end == NULL || end == value || *end != '\0') {
+                nsk_complain("nsk_jvmti_parseOptions(): not integer value in option: %s=%s\n", name, value);
+                return NSK_FALSE;
+            }
+            if (n < 0) {
+                nsk_complain("nsk_jvmti_parseOptions(): negative value in option: %s=%s\n", name, value);
+                return NSK_FALSE;
+            }
+            context.waittime = (int)n;
+        }
+    } else if (dashed) {
+        nsk_complain("nsk_jvmti_parseOptions(): unknown option: %c%s\n",
+                                                        NSK_JVMTI_OPTION_START, name);
+        return NSK_FALSE;
+    }
+    return NSK_TRUE;
+}
+
+static int add_option(const char opt[], int opt_len, const char val[], int val_len) {
+    char* name;
+    char* value;
+
+    int success = NSK_TRUE;
+    int dashed_opt = NSK_FALSE;
+
+    if (opt[0] == NSK_JVMTI_OPTION_START) {
+        dashed_opt = NSK_TRUE;
+        opt++;
+        opt_len--;
+    }
+    if (opt_len <= 0) {
+        nsk_complain("nsk_jvmti_parseOptions(): found empty option\n");
+        return NSK_FALSE;
+    }
+
+    name = (char*)malloc(opt_len + 1);
+    value = (char*)malloc(val_len + 1);
+
+    if (name == NULL || value == NULL) {
+        nsk_complain("nsk_jvmti_parseOptions(): out of memory\n");
+        success = NSK_FALSE;
+    } else {
+        strncpy(name, opt, opt_len);
+        name[opt_len] = '\0';
+        strncpy(value, val, val_len);
+        value[val_len] = '\0';
+
+        if (!check_option(dashed_opt, name, value)) {
+            success = NSK_FALSE;
+        }
+    }
+
+    if (success) {
+        if (context.options.count >= NSK_JVMTI_MAX_OPTIONS) {
+            nsk_complain("nsk_jvmti_parseOptions(): too many options for parsing\n");
+            success = NSK_FALSE;
+        } else {
+            context.options.names[context.options.count] = name;
+            context.options.values[context.options.count] = value;
+            context.options.count++;
+        }
+    }
+
+    if (!success) {
+        if (name != NULL)
+            free(name);
+        if (value != NULL)
+            free(value);
+    }
+
+    return success;
+}
+
+static void nsk_jvmti_free() {
+    if (context.options.count > 0) {
+        int i;
+        for (i = 0; i < context.options.count; i++) {
+            free(context.options.names[i]);
+            free(context.options.values[i]);
+        }
+        context.options.count = 0;
+    }
+    if (context.options.string != NULL) {
+        free(context.options.string);
+        context.options.string = NULL;
+    }
+}
+
+int isOptSep(char c) {
+    return isspace(c) || c == '~';
+}
+
+
+/**
+ *
+ * The current option will not perform more than one
+ * single option which given, this is due to places explained
+ * in this question.
+ *
+ **/
+
+ /*
+  * This whole play can be reduced with simple StringTokenizer (strtok).
+  *
+  */
+
+int nsk_jvmti_parseOptions(const char options[]) {
+    size_t len;
+    const char* opt;
+    int success = NSK_TRUE;
+
+    context.options.string = NULL;
+    context.options.count = 0;
+    context.waittime = 2;
+
+    if (options == NULL)
+        return NSK_TRUE;
+
+    len = strlen(options);
+    context.options.string = (char*)malloc(len + 2);
+
+    if (context.options.string == NULL) {
+            nsk_complain("nsk_jvmti_parseOptions(): out of memory\n");
+            return NSK_FALSE;
+    }
+    strncpy(context.options.string, options, len);
+    context.options.string[len] = '\0';
+    context.options.string[len+1] = '\0';
+
+    for (opt = context.options.string; ; ) {
+        const char* opt_end;
+        const char* val_sep;
+        int opt_len=0;
+        int val_len=0;
+                int exit=1;
+
+        while (*opt != '\0' && isOptSep(*opt)) opt++;
+        if (*opt == '\0') break;
+
+        val_sep = NULL;
+        /*
+            This should break when the first option it encounters other wise
+        */
+        for (opt_end = opt, opt_len=0; !(*opt_end == '\0' || isOptSep(*opt_end)); opt_end++,opt_len++) {
+            if (*opt_end == NSK_JVMTI_OPTION_VAL_SEP) {
+                val_sep = opt_end;
+                exit=0;
+                break;
+            }
+        }
+
+        if (exit == 1) break;
+
+        /* now scan for the search  for the option value end.
+
+        */
+        exit =1;
+        opt_end++;
+        val_sep++;
+        /**
+         * I was expecting this jvmti_parseOptions(),
+         * should be for multiple options as well.
+         * If this break is not there then It will expects
+         * to have. so a space should be sufficient as well.
+         */
+        for(val_len=0; !(*opt_end == '\0' || isOptSep(*opt_end)); opt_end++,val_len++) {
+            //if (*opt_end == NSK_JVMTI_OPTION_START) {
+            //    break;
+            //}
+        }
+
+        if (!add_option(opt, opt_len, val_sep, val_len)) {
+            success = NSK_FALSE;
+            break;
+        }
+        opt_end++;
+        opt = opt_end;
+    }
+
+    if (!success) {
+        nsk_jvmti_free();
+    }
+
+    return success;
+}
+
+
+/*************************************************************/
+
+/**
+ * Returns value of given option name; or NULL if no such option found.
+ * If search name is NULL then complains an error and returns NULL.
+ */
+const char* nsk_jvmti_findOptionValue(const char name[]) {
+    int i;
+
+    if (name == NULL) {
+        nsk_complain("nsk_jvmti_findOptionValue(): option name is NULL\n");
+        return NULL;
+    }
+
+    for (i = 0; i < context.options.count; i++) {
+        if (strcmp(name, context.options.names[i]) == 0)
+            return context.options.values[i];
+    }
+    return NULL;
+}
+
+/**
+ * Returns string value of given option; or defaultValue if no such option found.
+ * If options is specified but has empty value then complains an error and returns NULL.
+ */
+const char* nsk_jvmti_findOptionStringValue(const char name[], const char* defaultValue) {
+    const char* value;
+
+    if (name == NULL) {
+        nsk_complain("nsk_jvmti_findOptionStringValue(): option name is NULL\n");
+        return NULL;
+    }
+
+    value = nsk_jvmti_findOptionValue(name);
+    if (value == NULL) {
+        return defaultValue;
+    }
+
+    if (strlen(value) <= 0) {
+        nsk_complain("nsk_jvmti_findOptionStringValue(): empty value of option: %s=%s\n",
+                                                                            name, value);
+        return NULL;
+    }
+    return value;
+}
+
+/**
+ * Returns integer value of given option; or defaultValue if no such option found.
+ * If options is specified but has no integer value then complains an error and returns -1.
+ */
+int nsk_jvmti_findOptionIntValue(const char name[], int defaultValue) {
+    const char* value;
+
+    if (name == NULL) {
+        nsk_complain("nsk_jvmti_findOptionIntValue(): option name is NULL\n");
+        return -1;
+    }
+
+    value = nsk_jvmti_findOptionValue(name);
+    if (value == NULL) {
+        return defaultValue;
+    }
+
+    if (strlen(value) <= 0) {
+        nsk_complain("nsk_jvmti_findOptionIntValue(): empty value of option: %s=%s\n",
+                                                                            name, value);
+        return -1;
+    }
+
+    {
+        char* endptr = NULL;
+        int n = strtol(value, &endptr, 10);
+
+        if (endptr == NULL || *endptr != '\0') {
+            nsk_complain("nsk_jvmti_findOptionIntValue(): not integer value of option: %s=%s\n",
+                                                                            name, value);
+            return -1;
+        }
+        return n;
+    }
+}
+
+/**
+ * Returns number of parsed options.
+ */
+int nsk_jvmti_getOptionsCount() {
+    return context.options.count;
+}
+
+/**
+ * Returns name of i-th parsed option.
+ * If no such option then complains an error and returns NULL.
+ */
+const char* nsk_jvmti_getOptionName(int i) {
+    if (i < 0 || i >= context.options.count) {
+        nsk_complain("nsk_jvmti_getOptionName(): option index out of bounds: %d\n", i);
+        return NULL;
+    }
+    return context.options.names[i];
+}
+
+/**
+ * Returns value of i-th parsed option.
+ * If no such option then complains an error and returns NULL.
+ */
+const char* nsk_jvmti_getOptionValue(int i) {
+    if (i < 0 || i >= context.options.count) {
+        nsk_complain("nsk_jvmti_getOptionValue(): option index out of bounds: %d\n", i);
+        return NULL;
+    }
+    return context.options.values[i];
+}
+
+/*************************************************************/
+
+/**
+ * Returns value of -waittime option or default value if not specified.
+ */
+int  nsk_jvmti_getWaitTime() {
+    return context.waittime;
+}
+
+/**
+ * Sets specified waittime value.
+ */
+void nsk_jvmti_setWaitTime(int waittime) {
+    context.waittime = waittime;
+}
+
+/*************************************************************/
+
+int nsk_jvmti_lverify(int positive, jvmtiError error, jvmtiError expected,
+                        const char file[], int line, const char format[], ...)
+{
+    int failure=0;
+    int negative = !positive;
+    int errorCode = (int)error;
+    const char* errorName = TranslateError(error);
+    va_list ap;
+    va_start(ap,format);
+    nsk_lvtrace(NSK_TRACE_AFTER,file,line,format,ap);
+    if (negative || expected != JVMTI_ERROR_NONE)
+        nsk_ltrace(NSK_TRACE_AFTER,file,line,
+            "  jvmti error: code=%d, name=%s\n",errorCode,errorName);
+    if ((error == expected) == negative) {
+        nsk_lvcomplain(file,line,format,ap);
+        nsk_printf("#   jvmti error: code=%d, name=%s\n",errorCode,errorName);
+        if (expected != JVMTI_ERROR_NONE)
+            nsk_printf("#   error expected: code=%d, name=%s\n",
+                expected, TranslateError(expected));
+        failure=1;
+    };
+    va_end(ap);
+    return !failure;
+}
+
+/*************************************************************/
+
+JNIEXPORT jstring JNICALL
+Java_nsk_share_jvmti_ArgumentHandler_getAgentOptionsString(JNIEnv *jni, jobject obj) {
+    jstring str_obj = NULL;
+
+    if (!NSK_JNI_VERIFY(jni, (str_obj =
+            NSK_CPP_STUB2(NewStringUTF, jni, context.options.string)) != NULL)) {
+        return NULL;
+    }
+    return str_obj;
+}
+
+/*************************************************************/
+
+/**
+  * This method will try to redefine the class (classToRedefine) by loading
+  * physical file.  <b>pathToNewByteCode</b> option which is passed
+  * on OnLoad Phase also used.
+  *
+  * So This method will do a file read pathToByteCode+fileName+.class (total path).
+  * Constrcuts a class objects and does a redefine of the class.
+  * On successfull redefine this method will return eaither JNI_TRUE or JNI_FALSE
+  *
+  * Hint::
+  *     1)
+  *      If there are many redefine on same testcase, then please try to use
+  *      integer value (newclass00, newclass01, newclass02 , ....) way.
+  *
+  *     2) When you compile these please do keep, a metatag on testcase as
+  *     # build : native classes classes.redef
+  *
+  *     3) When you do build these classes are psysically located in build as.
+  *
+  * TESTBASE/bin/newclass0* directory.
+  * eg: for nks/jvmti/scenarios/hotswap/HS204/hs204t001 you should see
+  * TESTBASE/bin/newclass0* /nsk/hotswap/HS204/hs204t001/MyClass.class
+  *
+  */
+
+int nsk_jvmti_redefineClass(jvmtiEnv * jvmti,
+        jclass classToRedefine,
+        const char * fileName) {
+    redefineAttempted = NSK_TRUE;
+    if ( nsk_jvmti_findOptionValue(NSK_JVMTI_OPT_PATH_TO_NEW_BYTE_CODE)
+            == NULL  ) {
+        nsk_printf("#   error expected: %s \n",
+                NSK_JVMTI_OPT_PATH_TO_NEW_BYTE_CODE );
+        nsk_printf("Hint :: missing java -agentlib:agentlib=%s=DirName, ($TESTBASE/bin) \n",
+                NSK_JVMTI_OPT_PATH_TO_NEW_BYTE_CODE );
+        return NSK_FALSE;
+    }
+    if ( fileName == NULL) {
+        nsk_printf("# error file name expected did not found \n");
+        return NSK_FALSE;
+    }
+    {
+        char file [1024];
+        //= "DEFAULT";
+        sprintf(file,"%s/%s.class",
+                nsk_jvmti_findOptionValue(NSK_JVMTI_OPT_PATH_TO_NEW_BYTE_CODE),
+                fileName);
+        nsk_printf("# info :: File = %s \n",file);
+
+        {
+            FILE *bytecode;
+            unsigned char * classBytes;
+            jvmtiError error;
+            jint size;
+
+            bytecode = fopen(file, "rb");
+            error= JVMTI_ERROR_NONE;
+            if ( bytecode == NULL ) {
+                nsk_printf("# error **Agent::error opening file %s \n",file);
+                return NSK_FALSE;
+            }
+
+            nsk_printf("#  info **Agent:: opening file %s \n",file);
+            fseek(bytecode, 0, SEEK_END);
+            size = ftell(bytecode);
+            nsk_printf("# info file size= %ld\n",ftell(bytecode));
+            rewind(bytecode);
+            error = (*jvmti)->Allocate(jvmti, size,&classBytes);
+            if ( error != JVMTI_ERROR_NONE) {
+                nsk_printf(" Failed to create memory %s \n",TranslateError(error));
+                return NSK_FALSE;
+            }
+
+            if ( ((jint) fread( classBytes, 1,size,bytecode )) != size ) {
+                nsk_printf(" # error failed to read all the bytes , could be less or more \n");
+                return NSK_FALSE;
+            } else {
+                nsk_printf(" File red completely \n");
+            }
+            fclose(bytecode);
+            {
+                jvmtiClassDefinition classDef;
+                classDef.klass = classToRedefine;
+                classDef.class_byte_count= size;
+                classDef.class_bytes = classBytes;
+                error = (*jvmti)->RedefineClasses(jvmti,1,&classDef);
+                if ( error != JVMTI_ERROR_NONE ) {
+                    nsk_printf("# error occured while redefining %s ",
+                            TranslateError(error) );
+                    return NSK_FALSE;
+                }
+            }
+        }
+    }
+    redefineSucceed= NSK_TRUE;
+    return NSK_TRUE;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_nsk_share_jvmti_RedefineAgent_redefineAttempted(JNIEnv *jni,  jobject obj) {
+
+    if (redefineAttempted == NSK_TRUE) {
+        return JNI_TRUE;
+    }else {
+        return JNI_FALSE;
+    }
+}
+
+
+JNIEXPORT jboolean JNICALL
+Java_nsk_share_jvmti_RedefineAgent_isRedefined(JNIEnv * jni,  jobject obj ) {
+
+    if (redefineSucceed == NSK_TRUE) {
+        return JNI_TRUE;
+    }else {
+        return JNI_FALSE;
+    }
+}
+/**
+ * This jni method is a Java wrapper for agent status.
+ */
+JNIEXPORT jboolean JNICALL
+Java_nsk_share_jvmti_RedefineAgent_agentStatus(JNIEnv * jni,  jobject obj ) {
+    if ( agentFailed == NSK_TRUE) {
+        return JNI_FALSE;
+    } else {
+        return JNI_TRUE;
+    }
+}
+
+void nsk_jvmti_getFileName(int redefineCnt, const char * dir,  char * buf, size_t bufsize) {
+   snprintf(buf, bufsize, PATH_FORMAT, DIR_NAME, redefineCnt, dir);
+   buf[bufsize-1] = '\0';
+}
+
+int nsk_jvmti_enableNotification(jvmtiEnv *jvmti,jvmtiEvent event, jthread thread) {
+    jvmtiError rc=JVMTI_ERROR_NONE;
+    rc = (*jvmti)->SetEventNotificationMode(jvmti,JVMTI_ENABLE, event, thread);
+    if (rc != JVMTI_ERROR_NONE) {
+        nsk_printf("# error Failed to set Notification for Event \n ");
+        return NSK_FALSE;
+    }
+    return NSK_TRUE;
+}
+
+int nsk_jvmti_disableNotification(jvmtiEnv *jvmti,jvmtiEvent event, jthread thread) {
+  jvmtiError rc=JVMTI_ERROR_NONE;
+  rc = (*jvmti)->SetEventNotificationMode(jvmti,JVMTI_DISABLE, event, thread);
+  if (rc != JVMTI_ERROR_NONE) {
+      nsk_printf(" Failed to disaable Notification for Event ");
+      return NSK_FALSE;
+  }
+  return NSK_TRUE;
+}
+
+void nsk_jvmti_agentFailed() {
+    agentFailed = NSK_TRUE;
+}
+
+int isThreadExpected(jvmtiEnv *jvmti, jthread thread) {
+    static const char *vm_jfr_buffer_thread_name = "VM JFR Buffer Thread";
+    static const char *jfr_request_timer_thread_name = "JFR request timer";
+
+    jvmtiThreadInfo threadinfo;
+    NSK_JVMTI_VERIFY((*jvmti)->GetThreadInfo(jvmti, thread, &threadinfo));
+
+    if (strcmp(threadinfo.name, vm_jfr_buffer_thread_name) == 0)
+        return 0;
+
+    if (strcmp(threadinfo.name, jfr_request_timer_thread_name) == 0)
+        return 0;
+
+    return 1;
+}
+
+jint createRawMonitor(jvmtiEnv *env, const char *name, jrawMonitorID *monitor) {
+    jvmtiError error = NSK_CPP_STUB3(CreateRawMonitor, env, name, monitor);
+    if (!NSK_JVMTI_VERIFY(error)) {
+        return JNI_ERR;
+    }
+    return JNI_OK;
+}
+
+void exitOnError(jvmtiError error) {
+    if (!NSK_JVMTI_VERIFY(error)) {
+        exit(error);
+    }
+}
+
+void rawMonitorEnter(jvmtiEnv *env, jrawMonitorID monitor) {
+    jvmtiError error = NSK_CPP_STUB2(RawMonitorEnter, env, monitor);
+    exitOnError(error);
+}
+
+void rawMonitorExit(jvmtiEnv *env, jrawMonitorID monitor) {
+    jvmtiError error = NSK_CPP_STUB2(RawMonitorExit, env, monitor);
+    exitOnError(error);
+}
+
+void rawMonitorNotify(jvmtiEnv *env, jrawMonitorID monitor) {
+    jvmtiError error = NSK_CPP_STUB2(RawMonitorNotify, env, monitor);
+    exitOnError(error);
+}
+
+void rawMonitorWait(jvmtiEnv *env, jrawMonitorID monitor, jlong millis) {
+    jvmtiError error = NSK_CPP_STUB3(RawMonitorWait, env, monitor, millis);
+    exitOnError(error);
+}
+
+void getPhase(jvmtiEnv *env, jvmtiPhase *phase) {
+    jvmtiError error = NSK_CPP_STUB2(GetPhase, env, phase);
+    exitOnError(error);
+}
+
+/*************************************************************/
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/jvmti_tools.h	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,400 @@
+/*
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#ifndef NSK_JVMTI_TOOLS_DEFINED
+#define NSK_JVMTI_TOOLS_DEFINED
+
+/*************************************************************/
+
+#include "jvmti.h"
+
+/*************************************************************/
+
+#include "nsk_tools.h"
+#include "jni_tools.h"
+#include "JVMTITools.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/******************** Diagnostics errors *********************/
+
+/**
+ * Call JVMTI function in action, check error code to be
+ * JVMTI_ERROR_NONE and complain error otherwise.
+ * Also trace action execution if tracing mode is on.
+ */
+#define NSK_JVMTI_VERIFY(action)  \
+    (nsk_ltrace(NSK_TRACE_BEFORE,__FILE__,__LINE__,"%s\n",#action), \
+        nsk_jvmti_lverify(NSK_TRUE,action,JVMTI_ERROR_NONE, \
+                            __FILE__,__LINE__,"%s\n",#action))
+
+/**
+ * Call JVMTI function in action, check error code to be
+ * not JVMTI_ERROR_NONE and complain error otherwise.
+ * Also trace action execution if tracing mode is on.
+ */
+#define NSK_JVMTI_VERIFY_NEGATIVE(action)  \
+    (nsk_ltrace(NSK_TRACE_BEFORE,__FILE__,__LINE__,"%s\n",#action), \
+        nsk_jvmti_lverify(NSK_FALSE,action,JVMTI_ERROR_NONE, \
+                            __FILE__,__LINE__,"%s\n",#action))
+
+/**
+ * Call JVMTI function in action, check error code to be
+ * equal to 'code' and complain error otherwise.
+ * Also trace action execution if tracing mode is on.
+ */
+#define NSK_JVMTI_VERIFY_CODE(code, action)  \
+    (nsk_ltrace(NSK_TRACE_BEFORE,__FILE__,__LINE__,"%s\n",#action), \
+        nsk_jvmti_lverify(NSK_TRUE,action,code,__FILE__,__LINE__,"%s\n",#action))
+
+
+/********************* Initialization ************************/
+
+/**
+ * Initialize framework and setup command line options for the JVMTI test.
+ * If something fails, complains an error and returns 0 (NSK_FALSE).
+ * On success returns 1 (NSK_TRUE).
+ */
+int nsk_jvmti_parseOptions(const char options[]);
+
+/**
+ * Creates JVMTI environment for the JVMTI test.
+ * If something fails, complains an error and returns NULL.
+ */
+jvmtiEnv* nsk_jvmti_createJVMTIEnv(JavaVM* jvm, void* reserved);
+
+/**
+ * Register function to be run in agent thread.
+ * If something fails, complains an error and returns 0 (NSK_FALSE).
+ * On success returns 1 (NSK_TRUE).
+ */
+int nsk_jvmti_setAgentProc(jvmtiStartFunction proc, void* arg);
+
+/**
+ * Initialize multiple agent
+ */
+int nsk_jvmti_init_MA(jvmtiEventCallbacks* callbacks);
+
+
+/********************** Agent thread *************************/
+
+/**
+ * Returns thread object associated with agent thread..
+ * If something fails, complains an error and returns NULL.
+ */
+jthread nsk_jvmti_getAgentThread();
+
+/**
+ * Returns JNI environment constructed for agent thread.
+ * If something fails, complains an error and returns NULL.
+ */
+JNIEnv* nsk_jvmti_getAgentJNIEnv();
+
+/**
+ * Returns JVMTI environment constructed for agent.
+ * If something fails, complains an error and returns NULL.
+ */
+jvmtiEnv* nsk_jvmti_getAgentJVMTIEnv();
+
+/**
+ * Waits for next synchronization point with debuggee class,
+ * Then synchronizes current status and pauses debuggee thread.
+ * If something fails, complains an error and returns 0 (NSK_FALSE).
+ * On success returns 1 (NSK_TRUE).
+ */
+int nsk_jvmti_waitForSync(jlong timeout);
+
+/**
+ * Allow debuggee thread to continue execution after pausing on synchronization.
+ * If something fails, complains an error and returns 0 (NSK_FALSE).
+ * On success returns 1 (NSK_TRUE).
+ */
+int nsk_jvmti_resumeSync();
+
+/**
+ * Sleep current thread for given timeout in milliseconds.
+ */
+void nsk_jvmti_sleep(jlong timeout);
+
+/**
+ * Reset agent data to prepare for another run.
+ */
+void nsk_jvmti_resetAgentData();
+
+/*********************** Agent status ************************/
+
+#define NSK_STATUS_PASSED       0
+#define NSK_STATUS_FAILED       2
+#define NSK_STATUS_BASE         95
+
+/**
+ * Sets NSK_STATUS_FAILED as current agent status.
+ */
+void nsk_jvmti_setFailStatus();
+
+/**
+ * Returns 1 (NSK_TRUE) is current agent status is not NSK_STATUS_PASSED.
+ * Returns 0 (NSK_FALSE) otherwise.
+ */
+int  nsk_jvmti_isFailStatus();
+
+/**
+ * Returns current agent status.
+ */
+jint nsk_jvmti_getStatus();
+
+
+/********************* Classes and threads ******************/
+
+/**
+ * Finds first class with given signatire among loaded classes.
+ * If no class found or something fails, complains an error and returns NULL.
+ * On success creates and returns global reference to the found class.
+ */
+jclass nsk_jvmti_classBySignature(const char signature[]);
+
+/**
+ * Finds first thread with given name among alive threads.
+ * If no thread found or something fails, complains an error and returns NULL.
+ * On success creates and returns global reference to the found thread.
+ */
+jthread nsk_jvmti_threadByName(const char name[]);
+
+
+/******************* Breakpoints and locations ***************/
+
+/**
+ * Requests all capabilities needed for finding line location.
+ * If something fails, complains an error and returns 0 (NSK_FALSE).
+ * On success returns 1 (NSK_TRUE).
+ */
+int nsk_jvmti_addLocationCapabilities();
+
+/**
+ * Requests all capabilities needed for setting breakpoints.
+ * If something fails, complains an error and returns 0 (NSK_FALSE).
+ * On success returns 1 (NSK_TRUE).
+ */
+int nsk_jvmti_addBreakpointCapabilities();
+
+#define NSK_JVMTI_INVALID_JLOCATION     -2
+
+/**
+ * Returns jlocation for given method line.
+ * If something fails, complains an error and returns NSK_JVMTI_INVALID_JLOCATION.
+ */
+jlocation nsk_jvmti_getLineLocation(jclass cls, jmethodID method, int line);
+
+/**
+ * Sets breakpoint to the given method line and return breakpoint location.
+ * If something fails, complains an error and returns NSK_JVMTI_INVALID_JLOCATION.
+ */
+jlocation nsk_jvmti_setLineBreakpoint(jclass cls, jmethodID method, int line);
+
+/**
+ * Removes breakpoint from the given method line and return breakpoint location.
+ * If something fails, complains an error and returns NSK_JVMTI_INVALID_JLOCATION.
+ */
+jlocation nsk_jvmti_clearLineBreakpoint(jclass cls, jmethodID method, int line);
+
+
+/********************* Events management *********************/
+
+/**
+ * Enables or disables all events of given list for given thread or NULL.
+ * If something fails, complains an error and returns 0 (NSK_FALSE).
+ */
+int nsk_jvmti_enableEvents(jvmtiEventMode enable, int size,
+                            jvmtiEvent list[], jthread thread);
+
+/**
+ * Returns:
+ *      NSK_TRUE if given event is of optional functionality.
+ *      NSK_FALSE if given event is of required functionality.
+ */
+int nsk_jvmti_isOptionalEvent(jvmtiEvent event);
+
+/**
+ * Shows possessed capabilities
+ */
+void nsk_jvmti_showPossessedCapabilities(jvmtiEnv *jvmti);
+
+/**
+ * This method enables a single event
+ * Return NSK_TRUE when on success and NSK_FALSE on failure.
+ */
+int nsk_jvmti_enableNotification(jvmtiEnv *jvmti, jvmtiEvent event, jthread thread);
+
+/**
+ * This method disables a single event
+ * Return NSK_TRUE when on success and NSK_FALSE on failure.
+ */
+
+int nsk_jvmti_disableNotification(jvmtiEnv *jvmti, jvmtiEvent event, jthread thread);
+
+
+/******************** Access test options ********************/
+
+/**
+ * Returns value of given option name; or NULL if no such option found.
+ * If search name is NULL then complains an error and returns NULL.
+ */
+const char* nsk_jvmti_findOptionValue(const char name[]);
+
+/**
+ * Returns string value of given option; or defaultValue if no such option found.
+ * If options is specified but has empty value then complains an error and returns NULL.
+ */
+const char* nsk_jvmti_findOptionStringValue(const char name[], const char* defaultValue);
+
+/**
+ * Returns integer value of given option; or defaultValue if no such option found.
+ * If options is specified but has no integer value then complains an error and returns -1.
+ */
+int nsk_jvmti_findOptionIntValue(const char name[], int defaultValue);
+
+/**
+ * Returns number of parsed options.
+ */
+int nsk_jvmti_getOptionsCount();
+
+/**
+ * Returns name of i-th parsed option.
+ * If no such option then complains an error and returns NULL.
+ */
+const char* nsk_jvmti_getOptionName(int i);
+
+/**
+ * Returns value of i-th parsed option.
+ * If no such option then complains an error and returns NULL.
+ */
+const char* nsk_jvmti_getOptionValue(int i);
+
+
+/******************** Access system options ******************/
+
+/**
+ * Returns value of -waittime option or default value if not specified.
+ */
+int  nsk_jvmti_getWaitTime();
+
+/**
+ * Sets specified waittime value.
+ */
+void nsk_jvmti_setWaitTime(int waittime);
+
+
+/*************************************************************/
+
+/**
+ * If positive, assert jvmtiError is equal to expected; or
+ * if !positive, assert jvmtiError is not equal to expected.
+ * Assert means: complain if the assertion is false.
+ * Return the assertion value, either NSK_TRUE or NSK_FALSE.
+ * Anyway, trace if "nsk_tools" mode is verbose.
+ */
+int nsk_jvmti_lverify(int positive, jvmtiError code, jvmtiError expected,
+                        const char file[], int line, const char format[], ...);
+
+/************************************************************/
+
+
+/**
+ * This method could be useful for hotswap testcases developed under.`
+ * nsk/jvmti/scenarios/hotswap.
+ *
+ */
+ /**
+  * This method will try to redefine the class (classToRedefine) by loading
+  * physical file.  <b>pathToNewByteCode</b> option which is passed
+  * on OnLoad Phase also used.
+  *
+  * So This method will do a file read pathToByteCode+fileName+.class (total path).
+  * Constrcuts a class objects and does a redefine of the class.
+  * On successfull redefine this method will return eaither JNI_TRUE or JNI_FALSE
+  *
+  * Hint::
+  *     1)
+  *      If there are many redefine on same testcase, then please try to use
+  *      integer value (newclass00, newclass01, newclass02 , ....) way.
+  *
+  *     2) When you compile these please do keep, a metatag on testcase as
+  *     # build : native classes classes.redef
+  *
+  *     3) When you do build these classes are psysically located in build as.
+  *
+  * TESTBASE/bin/newclass0* directory.
+  * eg: for nks/jvmti/scenarios/hotswap/HS204/hs204t001 you should see
+  * TESTBASE/bin/newclass0* /nsk/hotswap/HS204/hs204t001/MyClass.class
+  *
+  */
+
+int nsk_jvmti_redefineClass(jvmtiEnv * jvmti,
+        jclass classToRedefine,
+        const char * fileName);
+/**
+ * changed this signature with Ekaterina's suggestion to move.
+ *
+ */
+void nsk_jvmti_getFileName(int redefineCnt, const char * dir,  char * buf, size_t bufsize);
+
+/**
+ * This method sets agent status to failed, This would enables native agent to set its status.
+ * There is <b>nsk_jvmti_setFailStatus()</b> method which is in sync with debugge/debugger combination.
+ * For non-debugger agents, this method can be used. There is java wrapper for this status,
+ * defined in java nsk.share.jvmti.RedefineAgent class as boolean : agentStatus().
+ *
+ */
+void nsk_jvmti_agentFailed();
+
+int isThreadExpected(jvmtiEnv *jvmti, jthread thread);
+
+jint createRawMonitor(jvmtiEnv *env, const char *name, jrawMonitorID *monitor);
+
+void exitOnError(jvmtiError error);
+
+/**
+   Wrappers for corresponded JVMTI functions check error code and force exit on error
+ */
+void rawMonitorEnter(jvmtiEnv *env, jrawMonitorID monitor);
+void rawMonitorExit(jvmtiEnv *env, jrawMonitorID monitor);
+void rawMonitorNotify(jvmtiEnv *env, jrawMonitorID monitor);
+void rawMonitorWait(jvmtiEnv *env, jrawMonitorID monitor, jlong millis);
+void getPhase(jvmtiEnv *env, jvmtiPhase *phase);
+
+/*******************************************************************/
+
+#if (defined(WIN32) || defined(_WIN32))
+#define snprintf _snprintf
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/castToGrandparent/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/func/castToGrandparent.
+ * VM Testbase keywords: [feature_mlvm]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Cast an object loaded with Unsafe.defineAnonymousClass to superclass of its parent class. This cast should succeed.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.func.castToGrandparent.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.anonloader.func.castToGrandparent.Test
+ */
+
+package vm.mlvm.anonloader.func.castToGrandparent;
+
+import vm.mlvm.anonloader.share.AnonkTestee01;
+import vm.mlvm.anonloader.share.AnonkTestee02;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.share.FileUtils;
+import vm.share.UnsafeAccess;
+
+public class Test extends MlvmTest {
+    private static final Class<?> PARENT = AnonkTestee02.class;
+
+    @Override
+    public boolean run() throws Exception {
+        byte[] classBytes = FileUtils.readClass(PARENT.getName());
+        Class<?> cls = UnsafeAccess.unsafe.defineAnonymousClass(
+                PARENT, classBytes, null);
+        Object anonObject = cls.newInstance();
+        // Try to cast anonymous class to its grandparent
+        AnonkTestee01 anonCastToParent = (AnonkTestee01) anonObject;
+        if ( anonCastToParent.equals(anonObject) )
+            Env.traceNormal("Anonymous object can be cast to original one");
+
+        // Try to cast using another method
+        new AnonkTestee01().getClass().cast(anonObject);
+
+        Env.traceNormal("Anonymous class can be cast to original one");
+
+        return true;
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/castToParent/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/func/castToParent.
+ * VM Testbase keywords: [feature_mlvm, clarify-spec, exclude]
+ * VM Testbase comments: 8199227
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Try to cast an object of a class, which is loaded by Unsafe.defineAnonymousClass to its
+ *     parent (called AnonkTestee01) using the following cast methods:
+ *         - (AnonkTestee01) o
+ *         - o.getClass().cast(new AnonkTestee01());
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ * @ignore 8199227
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.func.castToParent.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.anonloader.func.castToParent.Test
+ */
+
+package vm.mlvm.anonloader.func.castToParent;
+
+import vm.mlvm.anonloader.share.AnonkTestee01;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.share.FileUtils;
+import vm.share.UnsafeAccess;
+
+public class Test extends MlvmTest {
+    private static final Class<?> PARENT = AnonkTestee01.class;
+
+    public boolean run() throws Exception {
+        byte[] classBytes = FileUtils.readClass(PARENT.getName());
+        Class<?> cls = UnsafeAccess.unsafe.defineAnonymousClass(PARENT,
+                classBytes, null);
+        Object o = cls.newInstance();
+        // Try to cast anonymous class to its parent
+        AnonkTestee01 anonCastToParent = (AnonkTestee01) o;
+        if ( anonCastToParent.equals(o) )
+            Env.traceNormal("Anonymous object can be cast to original one");
+
+        // Cast the class
+        new AnonkTestee01().getClass().cast(o);
+
+        Env.traceNormal("Anonymous can be cast to original class");
+
+        return true;
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/classNameInStackTrace/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/func/classNameInStackTrace.
+ * VM Testbase keywords: [feature_mlvm]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     An exception is thrown by class loaded by Unsafe.defineAnonymousClass. Verify that
+ *     the exception's stack trace contains name of the current test class (i.e.,
+ *     verify that the stack trace is not broken)
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.func.classNameInStackTrace.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.anonloader.func.classNameInStackTrace.Test
+ */
+
+package vm.mlvm.anonloader.func.classNameInStackTrace;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import vm.mlvm.anonloader.share.AnonkTestee01;
+import vm.mlvm.share.MlvmTest;
+import vm.share.FileUtils;
+import vm.share.UnsafeAccess;
+
+public class Test extends MlvmTest {
+    private static final Class<?> PARENT = AnonkTestee01.class;
+
+    public boolean run() throws Exception {
+        byte[] classBytes = FileUtils.readClass(PARENT.getName());
+        Class<?> cls = UnsafeAccess.unsafe.defineAnonymousClass(PARENT,
+                classBytes, null);
+        try {
+            // hashCode() in AnonkTestee01 always throws an exception
+            cls.newInstance().hashCode();
+            return false;
+
+        } catch ( RuntimeException e ) {
+            ByteArrayOutputStream byteOS = new ByteArrayOutputStream();
+            PrintStream printStream = new PrintStream(byteOS);
+            e.printStackTrace(printStream);
+            printStream.close();
+            String stackTrace = byteOS.toString("ASCII");
+            getLog().display("Caught exception stack trace: " + stackTrace);
+            return stackTrace.contains(Test.class.getName());
+        }
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/finalSuperclass/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc java.base/jdk.internal.org.objectweb.asm
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/func/finalSuperclass.
+ * VM Testbase keywords: [feature_mlvm]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Try to load anonymous class derived from java.lang.System. The verification
+ *     system (split verifier and system class loader) should reject such attempt and
+ *     throw VerifyError.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.share.ReplaceClassParentTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.anonloader.share.ReplaceClassParentTest
+ *      -newParent java/lang/System
+ *      -requireExceptions java.lang.VerifyError
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/findByName/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/func/findByName.
+ * VM Testbase keywords: [feature_mlvm]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Try to find a class loaded using Unsafe.defineAnonymousClass through the VM system dictionary
+ *     (using Class.forName()). It is an error when the class can be found in this way.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.func.findByName.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.anonloader.func.findByName.Test
+ */
+
+package vm.mlvm.anonloader.func.findByName;
+
+import vm.mlvm.anonloader.share.AnonkTestee01;
+import vm.mlvm.share.MlvmTest;
+import vm.share.FileUtils;
+import vm.share.UnsafeAccess;
+
+public class Test extends MlvmTest {
+    private static final Class<?> PARENT = AnonkTestee01.class;
+
+    public boolean run() throws Exception {
+        try {
+            byte[] classBytes = FileUtils.readClass(PARENT.getName());
+            Class<?> c = UnsafeAccess.unsafe.defineAnonymousClass(PARENT,
+                    classBytes, null);
+            getLog().display("Anonymous class name: " + c.getName());
+            Class.forName(c.getName()).newInstance();
+            return false;
+        } catch ( ClassNotFoundException e ) {
+            return true;
+        }
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/invalidSuperclass/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc java.base/jdk.internal.org.objectweb.asm
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/func/invalidSuperclass.
+ * VM Testbase keywords: [feature_mlvm]
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.func.invalidSuperclass.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm -Xverify:all vm.mlvm.anonloader.func.invalidSuperclass.Test
+ */
+
+package vm.mlvm.anonloader.func.invalidSuperclass;
+
+import vm.mlvm.anonloader.share.ReplaceClassParentTest;
+import vm.mlvm.share.MlvmTestExecutor;
+
+/**
+ * Using Unsafe.defineAnonymousClass to load a class that has a patched superclass name, which is invalid.
+ * Verify that such class cannot be loaded.
+ *
+ */
+public class Test extends ReplaceClassParentTest {
+
+    @Override
+    protected void initializeTest() throws Throwable {
+        super.initializeTest();
+        setReplaceParent(String.format("%9999s", "Can you find me?"));
+        setRequiredExceptions(java.lang.NoClassDefFoundError.class);
+    }
+
+    public static void main(String[] args) {
+        MlvmTestExecutor.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/isGarbageCollected/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/func/isGarbageCollected.
+ * VM Testbase keywords: [feature_mlvm]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Load an anonymous class, drop all references to it and verify that it is collected
+ *     by GC afterwards (call System.gc() just in case). PhantomReference is used to
+ *     check that the anonymous class is gone.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.func.isGarbageCollected.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.anonloader.func.isGarbageCollected.Test
+ */
+
+package vm.mlvm.anonloader.func.isGarbageCollected;
+
+import java.lang.ref.PhantomReference;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+
+import vm.mlvm.anonloader.share.AnonkTestee01;
+import vm.mlvm.share.MlvmTest;
+import vm.share.FileUtils;
+import vm.share.UnsafeAccess;
+
+public class Test extends MlvmTest {
+    private static final Class<?> PARENT = AnonkTestee01.class;
+
+    public boolean run() throws Exception {
+        ReferenceQueue<Class<?>> refQueue = new ReferenceQueue<Class<?>>();
+        PhantomReference<Class<?>> anonClassRef = createClass(refQueue);
+        System.gc();
+        Reference<? extends Class<?>> deletedObject = refQueue.remove();
+        return anonClassRef.equals(deletedObject);
+    }
+
+    // a private method is great to keep anonClass reference local to make it GCed on the next cycle
+    private PhantomReference<Class<?>> createClass(ReferenceQueue<Class<?>> refQueue) throws Exception {
+        byte[] classBytes = FileUtils.readClass(PARENT.getName());
+        Class<?> anonClass = UnsafeAccess.unsafe.defineAnonymousClass(PARENT,
+                classBytes, null);
+        return new PhantomReference<Class<?>>(anonClass, refQueue);
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/func/uniqueClassAndObject/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc java.base/jdk.internal.org.objectweb.asm
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/func/uniqueClassAndObject.
+ * VM Testbase keywords: [feature_mlvm]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Create two anonymous classes and instantiate an object from each of them.
+ *     Verify that the references to these objects are different and references
+ *     to their classes are not equal too.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.func.uniqueClassAndObject.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.anonloader.func.uniqueClassAndObject.Test
+ */
+
+package vm.mlvm.anonloader.func.uniqueClassAndObject;
+
+import jdk.internal.org.objectweb.asm.ClassReader;
+import vm.mlvm.anonloader.share.AnonkTestee01;
+import vm.mlvm.share.MlvmTest;
+import vm.share.FileUtils;
+import vm.share.UnsafeAccess;
+
+public class Test extends MlvmTest {
+    private static final Class<?> PARENT = AnonkTestee01.class;
+
+    @Override
+    public boolean run() throws Exception {
+        byte[] classBytes = FileUtils.readClass(PARENT.getName());
+        ClassReader reader = new ClassReader(classBytes);
+        Object o1 = UnsafeAccess.unsafe.defineAnonymousClass(PARENT,
+                    classBytes, null).newInstance();
+        int cpLength = reader.getItemCount();
+        Object cpPatch[] = new Object[cpLength];
+        Object o2 = UnsafeAccess.unsafe.defineAnonymousClass(PARENT,
+                    classBytes, cpPatch).newInstance();
+        if ( o1 == o2 ) {
+            getLog().complain("Error: The objects are equal");
+            return false;
+        }
+
+        if ( o1.getClass() == o2.getClass() ) {
+            getLog().complain("Error: The classes are equal");
+            return false;
+        }
+
+        return true;
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/AnonkTestee01.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.anonloader.share;
+
+import vm.mlvm.share.Env;
+
+public class AnonkTestee01 {
+    public final static String muzzy = "BIG \uFFFF\u0000\uFFFE\uFEFF MUZZY";
+    public final static String
+    theDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrum
+    = String.format("%65500c%X", 'c', Env.getRNG().nextLong());
+
+    public final String beatingTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrum() {
+        return theDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrumIsTheDrum;
+    }
+
+    public final String toString() {
+        return "Something that looks like " + super.toString();
+    }
+
+    @Override
+    public int hashCode() {
+        throw new RuntimeException("Making fun of errors");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/AnonkTestee02.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.anonloader.share;
+
+public class AnonkTestee02 extends AnonkTestee01 {
+    public AnonkTestee02() {}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/ReplaceClassParentTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.anonloader.share;
+
+import jdk.internal.org.objectweb.asm.ClassReader;
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.MlvmTestExecutor;
+import vm.mlvm.share.Env;
+import vm.share.FileUtils;
+import vm.share.UnsafeAccess;
+import vm.share.options.Option;
+
+/**
+ * This is a base class for kind of tests, which modify the parent class name of test dummy class vm.mlvm.share.AnonkTestee01
+ * with an arbitrary string, load the modified class using Unsafe.defineAnonymousClass and instantiate it.
+ * <p>
+ * The tests can extend this class or use it from command-line to provide the actual data:
+ * <ul>
+ *   <li>new parent class name,
+ *   <li>optionally the list of expected exceptions to be thrown during class loading and instantiation
+ *       (see {@link vm.mlvm.share.MlvmTest#setRequiredExceptions(Class<? extends Throwable>... classes)} for details)
+ * </ul>
+ */
+
+public class ReplaceClassParentTest extends MlvmTest {
+
+    @Option(name = "newParent", default_value = "", description = "String to replace the name of the parent class of the testee")
+    private String newParentOpt;
+
+    public void setReplaceParent(String newParent) {
+        newParentOpt = newParent;
+    }
+
+    private static final Class<?> TESTEE_CLASS = AnonkTestee01.class;
+
+    public ReplaceClassParentTest() {
+    }
+
+    public boolean run() throws Throwable {
+        byte[] classBytes = FileUtils.readClass(TESTEE_CLASS.getName());
+        ClassReader reader = new ClassReader(classBytes);
+        int superclassNameIdx = reader.readUnsignedShort(reader.header + 4);
+        int cpLength = reader.getItemCount();
+        if (superclassNameIdx == 0) {
+            throw new RuntimeException("Test bug: unable to find super class"
+                    + " name index");
+        }
+        Env.traceDebug("Superclass name CP index: " + superclassNameIdx
+                + "; replacing CP entry with '" + newParentOpt + "'");
+        // now, construction of cp patch
+        Object cpPatch[] = new Object[cpLength];
+        cpPatch[superclassNameIdx] = newParentOpt;
+        // define and instantiate
+        UnsafeAccess.unsafe.defineAnonymousClass(TESTEE_CLASS, classBytes,
+                cpPatch).newInstance();
+        // Whether test should pass or fail should be specified via requireExceptions mechanism in MlvmTest
+        return true;
+
+    }
+
+    public static void main(String[] args) {
+        MlvmTestExecutor.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/share/StressClassLoadingTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.anonloader.share;
+
+import java.io.File;
+import java.util.Objects;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import nsk.share.test.Stresser;
+import vm.share.options.Option;
+import vm.share.options.OptionSupport;
+import vm.share.options.IgnoreUnknownArgumentsHandler;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.CustomClassLoaders;
+import vm.share.FileUtils;
+import vm.share.UnsafeAccess;
+
+/**
+ * Does stress-testing of class loading subsystem.
+ * This class should be subclassed by the tests
+ * to provide test class data.
+ *
+ * <p>StressClassLoadingTest performs a number of iterations
+ * (the default value is 100 000).
+ * Each iteration gets class bytes from the subclass
+ * and loads it into JVM using either:
+ * <ul>
+ *    <li>a custom {@link java.lang.ClassLoader} implementation or
+ *    <li>{@link sun.misc.Unsafe#defineAnonymousClass} call.
+ * </ul>
+ *
+ * <p>Loading is done in a separate thread. If this thread is stuck,
+ * it is killed after some timeout (default is 10 seconds, please see
+ * -parseTimeout option). The class file is saved as hangXX.class, where XX
+ * starts at 00 and is increased on every hangup.
+ * A prefix can be added to the file name using {@link #setFileNamePrefix}
+ *
+ * <p>The test fails, if there were hangups.
+ *
+ * <p>By default, before loading class, the bytes are
+ * saved to {@code _AnonkTestee01.class} file in the current directory.
+ * If JVM crashes, the bytecodes can be analysed.
+ * Class saving is controlled by -saveClassFile option.
+ * A prefix can be added to the file name using {@link #setFileNamePrefix}
+ * function.
+ *
+ * <p>There is a tool to load the saved .class file.
+ * The tool tries to load class using a number of class loaders. For more
+ * information, please see tool documentation: {@link vm.mlvm.tools.LoadClass}.
+ *
+ * @see vm.mlvm.tools.LoadClass
+ */
+public abstract class StressClassLoadingTest extends MlvmTest {
+    private static final String RESCUE_FILE_NAME = "_AnonkTestee01.class";
+    private static final String HUNG_CLASS_FILE_NAME = "hang%02d.class";
+
+    @Option(name = "iterations", default_value = "100000",
+            description = "How many times generate a class and parse it")
+    private static int iterations;
+
+    @Option(name = "saveClassFile", default_value = "true",
+            description = "Save generated class file before loading."
+                    + " Useful when VM crashes on loading")
+    private static boolean saveClassFile;
+
+    @Option(name = "parseTimeout", default_value = "10000",
+            description = "Timeout in millisectionds to detect hung parser"
+                    + " thread. The parser thread is killed after the timeout")
+    private static int parseTimeout;
+
+    @Option(name = "unsafeLoad", default_value = "false",
+            description = "An option for adhoc experiments: load class via "
+                    + "Unsafe.defineAnonymousClass(). Since in this way the "
+                    + "loading process skips several security checks, if the "
+                    + "class is not valid, crashes and assertions are normal.")
+    private static boolean unsafeLoad;
+
+    private String fileNamePrefix = "";
+
+    private final static AtomicBoolean classFileMessagePrinted
+            = new AtomicBoolean(false);
+
+    /**
+     * Sets prefix for names of the files, created by test:
+     * _AnonkTestee01.class and hangXX.class.
+     *
+     * @param p a prefix to add before file name.
+     * @throws java.lang.NullPointerException if p is null
+     */
+    public void setFileNamePrefix(String p) {
+        Objects.requireNonNull(p);
+        fileNamePrefix = p;
+    }
+
+    static volatile boolean optionsSetup = false;
+    public static void setupOptions(Object instance) {
+        if (!optionsSetup) {
+            synchronized (StressClassLoadingTest.class) {
+                if (!optionsSetup) {
+                    OptionSupport.setup(instance, Env.getArgParser().getRawArguments(), new IgnoreUnknownArgumentsHandler());
+                    optionsSetup = true;
+
+                    Env.traceNormal("StressClassLoadingTest options: iterations: " + iterations);
+                    Env.traceNormal("StressClassLoadingTest options: unsafeLoad: " + unsafeLoad);
+                    Env.traceNormal("StressClassLoadingTest options: parseTimeout: " + parseTimeout);
+                    Env.traceNormal("StressClassLoadingTest options: saveClassFile: " + saveClassFile);
+                }
+            }
+        }
+    }
+
+    public boolean run() throws Exception {
+        setupOptions(this);
+
+        int hangNum = 0;
+
+        Stresser stresser = createStresser();
+        stresser.start(iterations);
+
+        while (stresser.continueExecution()) {
+            stresser.iteration();
+
+            byte[] classBytes = generateClassBytes();
+            Class<?> hostClass = getHostClass();
+            String className = hostClass.getName();
+            File rescueFile = new File(String.format("%s_%d_%s",
+                    fileNamePrefix, stresser.getIteration(), RESCUE_FILE_NAME));
+            if (saveClassFile) {
+                // Write out the class file being loaded.  It's useful
+                // to have if the JVM crashes.
+                FileUtils.writeBytesToFile(rescueFile, classBytes);
+                if (classFileMessagePrinted.compareAndSet(false, true)) {
+                    Env.traceImportant("If the JVM crashes then "
+                            + "the class file causing the crash is saved as *_*_"
+                            + RESCUE_FILE_NAME);
+                }
+            }
+
+            Thread parserThread  = new Thread() {
+                public void run() {
+                    try {
+                        Class<?> c;
+                        if (unsafeLoad) {
+                            c = UnsafeAccess.unsafe.defineAnonymousClass(hostClass, classBytes, null);
+                        } else {
+                            c = CustomClassLoaders.makeClassBytesLoader(classBytes, className)
+                                    .loadClass(className);
+                        }
+                        c.newInstance();
+                    } catch (Throwable e) {
+                        Env.traceVerbose(e, "parser caught exception");
+                    }
+                }
+            };
+
+            parserThread.setDaemon(true);
+            parserThread.start();
+            parserThread.join(parseTimeout);
+
+            if (parserThread.isAlive()) {
+                Env.complain("Killing parser thread");
+                StackTraceElement[] stack = parserThread.getStackTrace();
+                Env.traceImportant(parserThread + " stack trace:");
+                for (int i = 0; i < stack.length; ++i) {
+                    Env.traceImportant(parserThread + "\tat " + stack[i]);
+                }
+
+                if (saveClassFile) {
+                    Files.move(rescueFile.toPath(), Paths.get(fileNamePrefix
+                            + String.format(HUNG_CLASS_FILE_NAME, hangNum)));
+                }
+                ++hangNum;
+            } else if (saveClassFile) {
+                rescueFile.delete();
+            }
+        }
+
+        stresser.finish();
+
+        if (hangNum > 0) {
+            Env.complain("There were " + hangNum + " hangups during parsing."
+                    + " The class files, which produced hangup were saved as "
+                    + fileNamePrefix + String.format(HUNG_CLASS_FILE_NAME, 0)
+                    + "... in the test directory. You may want to analyse them."
+                    + " Failing this test because of hangups.");
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Generated class bytes. The method is called for each iteration.
+     *
+     * @return Byte array with the generated class
+     */
+    protected abstract byte[] generateClassBytes();
+
+    /**
+     * Returns a host class for the generated class.
+     *
+     * @return A host class that for the generated class
+     */
+    protected abstract Class<?> getHostClass();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/byteMutation/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/byteMutation/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/stress/byteMutation.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.stress.byteMutation.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.anonloader.stress.byteMutation.Test -stressIterationsFactor 100000
+ */
+
+package vm.mlvm.anonloader.stress.byteMutation;
+
+import vm.mlvm.anonloader.share.AnonkTestee01;
+import vm.mlvm.anonloader.share.StressClassLoadingTest;
+import vm.share.FileUtils;
+import vm.share.options.Option;
+
+/**
+ * The test does the following in a cycle:
+ *
+ * <ol>
+ * <li>Takes bytes from a valid class file
+ * <li>Sets 1 to 5 bytes in random positions to random values
+ * <li>Tries to load such class using:
+ *     <ul>
+ *       <li>a custom class loader,
+ *       <li>{@link sun.misc.Unsafe#defineAnonymousClass}
+ *           when {@code -unsafeLoad true} option is passed to the test.
+ *     </ul>
+ * </ol>
+ *
+ * <p>In most cases the resulting class file is invalid and rejected by
+ * the VM verifier. But this test tries to find pathological cases, such
+ * as infinite loops during verification or VM crashes.
+ *
+ * <p>NB: There is a tool to load invalid classes saved by this test.
+ * Please see tool documentation at {@link vm.mlvm.tools.LoadClass}
+ *
+ */
+public class Test extends StressClassLoadingTest {
+    private final static Class<?> HOST_CLASS = AnonkTestee01.class;
+    private final byte[] testeeBytes;
+    @Option(name = "mutationCount", default_value = "3",
+            description = "How many bytes to mutate in a class")
+    private int mutationCount = 3;
+
+    /**
+     * Constructs the test.
+     * @throws Exception if there are any errors when
+     * reading {@link vm.mlvm.anonloader.share.AnonkTestee01} class bytecodes.
+     */
+    public Test() throws Exception {
+        this.testeeBytes = FileUtils.readClass(AnonkTestee01.class.getName());
+    }
+
+    /**
+     * Returns {@link vm.mlvm.anonloader.share.AnonkTestee01} class to the
+     * parent.
+     * @return {@link vm.mlvm.anonloader.share.AnonkTestee01} class.
+     */
+    @Override
+    protected Class<?> getHostClass() {
+        return HOST_CLASS;
+    }
+
+    /**
+     * Takes {@link vm.mlvm.anonloader.share.AnonkTestee01} class bytecodes
+     * and modifies mutationCount bytes setting them to random values.
+     * @return {@link vm.mlvm.anonloader.share.AnonkTestee01} class bytecodes with modified bytes.
+     */
+    @Override
+    protected byte[] generateClassBytes() {
+        // TODO: there is non-zero probability that generated bytecode will be
+        // valid, so it should be a subject of fuzzing mechanism
+        byte[] alteredBytes = testeeBytes.clone();
+        for (int j = 0; j < mutationCount; ++j) {
+            alteredBytes[getRNG().nextInt(alteredBytes.length)] = (byte) getRNG().nextInt(256);
+        }
+        return alteredBytes;
+    }
+
+    /**
+     * Runs the test.
+     * @param args Test arguments.
+     */
+    public static void main(String[] args) {
+        StressClassLoadingTest.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/heap/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/heap/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/stress/oome/heap.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.stress.oome.heap.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm -XX:-UseGCOverheadLimit vm.mlvm.anonloader.stress.oome.heap.Test
+ */
+
+package vm.mlvm.anonloader.stress.oome.heap;
+
+import java.util.List;
+import java.io.IOException;
+
+import vm.mlvm.anonloader.share.AnonkTestee01;
+import vm.mlvm.share.MlvmOOMTest;
+import vm.mlvm.share.MlvmTestExecutor;
+import vm.mlvm.share.Env;
+import vm.share.FileUtils;
+import vm.share.UnsafeAccess;
+
+/**
+ * This test loads a class using Unsafe.defineAnonymousClass, creates instances
+ * of that class and stores them, expecting Heap OOME.
+ *
+ */
+
+public class Test extends MlvmOOMTest {
+    @Override
+    protected void checkOOME(OutOfMemoryError oome) {
+        String message = oome.getMessage();
+        if (!"Java heap space".equals(message)) {
+            throw new RuntimeException("TEST FAIL : wrong OOME", oome);
+        }
+    }
+    @Override
+    protected void eatMemory(List<Object> list) {
+        byte[] classBytes = null;
+        try {
+            classBytes = FileUtils.readClass(AnonkTestee01.class.getName());
+        } catch (IOException e) {
+            Env.throwAsUncheckedException(e);
+        }
+        try {
+            while (true) {
+                list.add(UnsafeAccess.unsafe.defineAnonymousClass(AnonkTestee01.class,
+                    classBytes, null).newInstance());
+            }
+        } catch (InstantiationException | IllegalAccessException e) {
+            Env.throwAsUncheckedException(e);
+        }
+    }
+
+    public static void main(String[] args) {
+        MlvmTestExecutor.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/oome/metaspace/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/stress/oome/metaspace.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.stress.oome.metaspace.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm -XX:-UseGCOverheadLimit -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=20m vm.mlvm.anonloader.stress.oome.metaspace.Test
+ */
+
+package vm.mlvm.anonloader.stress.oome.metaspace;
+
+import java.util.List;
+import java.io.IOException;
+
+import vm.mlvm.anonloader.share.AnonkTestee01;
+import vm.mlvm.share.MlvmOOMTest;
+import vm.mlvm.share.MlvmTestExecutor;
+import vm.mlvm.share.Env;
+import vm.share.FileUtils;
+import vm.share.UnsafeAccess;
+
+/**
+ * This test loads classes using Unsafe.defineAnonymousClass and stores them,
+ * expecting Metaspace OOME.
+ *
+ */
+public class Test extends MlvmOOMTest {
+    @Override
+    protected void checkOOME(OutOfMemoryError oome) {
+        String message = oome.getMessage();
+        if (!"Metaspace".equals(message) && !"Compressed class space".equals(message)) {
+            throw new RuntimeException("TEST FAIL : wrong OOME", oome);
+        }
+    }
+
+    @Override
+    protected void eatMemory(List<Object> list) {
+        byte[] classBytes = null;
+        try {
+            classBytes = FileUtils.readClass(AnonkTestee01.class.getName());
+        } catch (IOException e) {
+            Env.throwAsUncheckedException(e);
+        }
+        while (true) {
+            list.add(UnsafeAccess.unsafe.defineAnonymousClass(AnonkTestee01.class,
+                    classBytes, null));
+        }
+    }
+
+    public static void main(String[] args) {
+        MlvmTestExecutor.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/parallelLoad/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/parallelLoad/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/stress/parallelLoad.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.stress.parallelLoad.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      -XX:+BytecodeVerificationLocal
+ *      vm.mlvm.anonloader.stress.parallelLoad.Test
+ *      -threadsPerCpu 4
+ *      -threadsExtra 20
+ *      -parseTimeout 0
+ *      -unsafeLoad true
+ */
+
+package vm.mlvm.anonloader.stress.parallelLoad;
+
+import vm.mlvm.anonloader.share.StressClassLoadingTest;
+import vm.mlvm.anonloader.share.AnonkTestee01;
+import vm.mlvm.share.MlvmTestExecutor;
+import vm.mlvm.share.MultiThreadedTest;
+import vm.share.FileUtils;
+
+/**
+ * Verifies that loading classes in parallel from several threads using
+ * {@link sun.misc.Unsafe#defineAnonymousClass}
+ * does not produce exceptions and crashes.
+ *
+ */
+public class Test extends MultiThreadedTest {
+    private static final Class<?> HOST_CLASS = AnonkTestee01.class;
+    private static final String NAME_PREFIX = "thread%03d";
+
+    private final byte[] classBytes;
+
+    private static class SubTest extends StressClassLoadingTest {
+        private final byte[] classBytes;
+
+        public SubTest(byte[] classBytes) {
+            this.classBytes = classBytes;
+        }
+
+        @Override
+        protected Class<?> getHostClass() {
+            return HOST_CLASS;
+        }
+
+        @Override
+        protected byte[] generateClassBytes() {
+            return classBytes;
+        }
+    }
+
+    public Test() throws Exception {
+        classBytes = FileUtils.readClass(HOST_CLASS.getName());
+    }
+
+    /**
+     * Constructs a sub-test class and runs it. The sub-test class loads
+     * {@link vm.mlvm.anonloader.share.AnonkTestee01} class bytecodes
+     * using {@link sun.misc.Unsafe#defineAnonymousClass}
+     * @param numThread Number of the thread
+     * @throws Exception if there any exceptions thrown in the sub-test
+     */
+    @Override
+    protected boolean runThread(int numThread) throws Exception {
+        SubTest subTest = new SubTest(classBytes);
+        subTest.setFileNamePrefix(String.format(NAME_PREFIX, numThread));
+        return subTest.run();
+    }
+
+    /**
+     * Runs the test.
+     * @param args Test arguments.
+     */
+    public static void main(String[] args) {
+        MlvmTestExecutor.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/randomBytecodes/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/anonloader/stress/randomBytecodes/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.misc
+ *
+ * @summary converted from VM Testbase vm/mlvm/anonloader/stress/randomBytecodes.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.anonloader.stress.randomBytecodes.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.anonloader.stress.randomBytecodes.Test -stressIterationsFactor 100000
+ */
+
+package vm.mlvm.anonloader.stress.randomBytecodes;
+
+import java.util.Arrays;
+import vm.mlvm.anonloader.share.StressClassLoadingTest;
+
+/**
+ * The test does the following in a cycle:
+ * <ol>
+ * <li>Creates a class bytecodes that has a valid 12-byte header
+ *     and has totally random bytes after the header
+ * <li>Tries to load such class using:
+ *     <ul>
+ *       <li>a custom class loader, or
+ *       <li>{@link sun.misc.Unsafe#defineAnonymousClass}
+ *           when {@code -unsafeLoad true} is set.
+ *     </ul>
+ * </ol>
+ *
+ * <p>In most cases the resulting class file is invalid and rejected by
+ * the VM verifier. But this test is looking for pathological cases
+ * such as infinite loops in the verifier or VM crashes.
+ *
+ * <p>NB: There is a tool to load invalid classes saved by this test.
+ * Please see tool documentation at {@link vm.mlvm.tools.LoadClass}.
+ *
+ */
+public class Test extends StressClassLoadingTest {
+    private static final Class<?> HOST_CLASS = Test.class;
+    private static final int MAX_SIZE = 0xFFF7;
+    private static final byte[] CLASS_HEADER = new byte[] {
+        (byte)0xCA, (byte)0xFE, (byte)0xBA, (byte)0xBE,
+        0x00, 0x00, 0x00, 0x32
+    };
+
+    /**
+     * Returns {@link vm.mlvm.anonloader.share.AnonkTestee01} class to the
+     * parent.
+     * @return {@link vm.mlvm.anonloader.share.AnonkTestee01} class.
+     */
+    @Override
+    protected Class<?> getHostClass() {
+        return HOST_CLASS;
+    }
+
+    /**
+     * Generates a class with valid header (magic and version fields) and
+     * random bytes after the header.
+     * <p>Class size is random ([8..65527]).
+     * Byte values are limited to [0..11] range in order to increase
+     * possiblity that the random class passes the initial (dead-on-arrival)
+     * stages of the verifier and is rejected
+     * in more interesting ones, like method bytecode verification.
+     * Class version is 52.
+     *
+     * @return Class with valid Java header (8 bytes) and totally random bytes
+     * after the header
+     */
+    @Override
+    protected byte[] generateClassBytes() {
+        final byte[] classBytes = Arrays.copyOf(CLASS_HEADER,
+                CLASS_HEADER.length + getRNG().nextInt(MAX_SIZE));
+        for (int j = CLASS_HEADER.length; j < classBytes.length; j++) {
+            classBytes[j] = (byte) getRNG().nextInt(12);
+        }
+
+        return classBytes;
+    }
+
+    /**
+     * Runs the test.
+     * @param args Test arguments.
+     */
+    public static void main(String[] args) {
+        StressClassLoadingTest.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenCPFullOfMH.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.cp.share;
+
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.ClassWriterExt;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.org.objectweb.asm.Opcodes;
+import jdk.internal.org.objectweb.asm.Handle;
+
+import vm.mlvm.share.ClassfileGenerator;
+import vm.mlvm.share.Env;
+
+public class GenCPFullOfMH extends GenFullCP {
+
+    public static void main(String[] args) {
+        ClassfileGenerator.main(args);
+    }
+
+    @Override
+    protected void generateCommonData(ClassWriterExt cw) {
+        cw.setCacheMHandles(false);
+
+        cw.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC,
+                STATIC_FIELD_NAME,
+                STATIC_FIELD_SIGNATURE, null, false);
+
+        cw.visitField(Opcodes.ACC_PUBLIC,
+                INSTANCE_FIELD_NAME,
+                INSTANCE_FIELD_SIGNATURE, null, false);
+
+        createInitMethod(cw);
+        createTargetMethod(cw);
+
+        MethodVisitor mv = cw.visitMethod(
+                Opcodes.ACC_PUBLIC,
+                INSTANCE_TARGET_METHOD_NAME,
+                INSTANCE_TARGET_METHOD_SIGNATURE,
+                null,
+                new String[0]);
+        finishMethodCode(mv);
+    }
+
+    @Override
+    protected void generateCPEntryData(ClassWriter cw, MethodVisitor mw) {
+        HandleType[] types = HandleType.values();
+        HandleType type = types[Env.getRNG().nextInt(types.length)];
+
+        switch (type) {
+            case PUTFIELD:
+            case PUTSTATIC:
+                mw.visitInsn(Opcodes.ICONST_0);
+                break;
+            case INVOKESPECIAL:
+            case INVOKEVIRTUAL:
+            case INVOKEINTERFACE:
+                mw.visitInsn(Opcodes.ACONST_NULL);
+                break;
+        }
+
+        Handle handle;
+        switch (type) {
+            case GETFIELD:
+            case PUTFIELD:
+                handle = new Handle(type.asmTag,
+                        fullClassName,
+                        INSTANCE_FIELD_NAME,
+                        INSTANCE_FIELD_SIGNATURE);
+                break;
+            case GETSTATIC:
+            case PUTSTATIC:
+                handle = new Handle(type.asmTag,
+                        fullClassName,
+                        STATIC_FIELD_NAME,
+                        STATIC_FIELD_SIGNATURE);
+                break;
+            case NEWINVOKESPECIAL:
+                handle = new Handle(type.asmTag,
+                        fullClassName,
+                        INIT_METHOD_NAME,
+                        INIT_METHOD_SIGNATURE);
+                break;
+            case INVOKESTATIC:
+                handle = new Handle(type.asmTag,
+                        fullClassName,
+                        TARGET_METHOD_NAME,
+                        TARGET_METHOD_SIGNATURE);
+                break;
+            case INVOKEINTERFACE:
+                handle = new Handle(type.asmTag,
+                        getDummyInterfaceClassName(),
+                        INSTANCE_TARGET_METHOD_NAME,
+                        INSTANCE_TARGET_METHOD_SIGNATURE);
+                break;
+            case INVOKESPECIAL:
+            case INVOKEVIRTUAL:
+                handle = new Handle(type.asmTag,
+                        fullClassName,
+                        INSTANCE_TARGET_METHOD_NAME,
+                        INSTANCE_TARGET_METHOD_SIGNATURE);
+                break;
+            default:
+                throw new Error("Unexpected handle type " + type);
+        }
+        mw.visitLdcInsn(handle);
+
+        switch (type) {
+            case GETFIELD:
+            case GETSTATIC:
+                mw.visitInsn(Opcodes.POP);
+                break;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenCPFullOfMT.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.cp.share;
+
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.ClassWriterExt;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.org.objectweb.asm.Opcodes;
+import jdk.internal.org.objectweb.asm.Type;
+
+import vm.mlvm.share.ClassfileGenerator;
+
+public class GenCPFullOfMT extends GenFullCP {
+
+    public static void main(String[] args) {
+        ClassfileGenerator.main(args);
+    }
+
+    @Override
+    protected void generateCommonData(ClassWriterExt cw) {
+        cw.setCacheMTypes(false);
+        super.generateCommonData(cw);
+    }
+
+    @Override
+    protected void generateCPEntryData(ClassWriter cw, MethodVisitor mw) {
+        mw.visitLdcInsn(Type.getMethodType("(FIZ)V"));
+        mw.visitInsn(Opcodes.POP);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenFullCP.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,316 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.cp.share;
+
+import jdk.internal.org.objectweb.asm.ByteVector;
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.ClassWriterExt;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.org.objectweb.asm.Opcodes;
+import jdk.internal.org.objectweb.asm.Type;
+
+import vm.mlvm.share.ClassfileGenerator;
+import vm.mlvm.share.Env;
+
+public abstract class GenFullCP extends ClassfileGenerator {
+
+    /**
+     * Generate field description for object type from class name:
+     * return "L" + className + ";";
+     * @param className Class name
+     * @return field descriptor representing the class type
+     */
+    protected static String fd(String className) {
+        return "L" + className + ";";
+    }
+
+    // Universal constants
+    protected static final String JL_OBJECT = "java/lang/Object";
+    protected static final String JL_CLASS = "java/lang/Class";
+    protected static final String JL_CLASSLOADER  = "java/lang/ClassLoader";
+    protected static final String JL_STRING = "java/lang/String";
+    protected static final String JL_RUNTIMEEXCEPTION = "java/lang/RuntimeException";
+    protected static final String JL_BOOTSTRAPMETHODERROR = "java/lang/BootstrapMethodError";
+    protected static final String JL_THROWABLE = "java/lang/Throwable";
+    protected static final String JLI_METHODTYPE = "java/lang/invoke/MethodType";
+    protected static final String JLI_METHODHANDLE = "java/lang/invoke/MethodHandle";
+    protected static final String JLI_METHODHANDLES = "java/lang/invoke/MethodHandles";
+    protected static final String JLI_METHODHANDLES_LOOKUP = "java/lang/invoke/MethodHandles$Lookup";
+    protected static final String JLI_CALLSITE = "java/lang/invoke/CallSite";
+    protected static final String JLI_CONSTANTCALLSITE = "java/lang/invoke/ConstantCallSite";
+
+    protected static final String VOID_NO_ARG_METHOD_SIGNATURE = "()V";
+
+    protected static final String NEW_INVOKE_SPECIAL_CLASS_NAME = "java/lang/invoke/NewInvokeSpecialCallSite";
+    protected static final String NEW_INVOKE_SPECIAL_BOOTSTRAP_METHOD_SIGNATURE = "(" + fd(JLI_METHODHANDLES_LOOKUP) + fd(JL_STRING) + fd(JLI_METHODTYPE) + ")V";
+
+    protected static final String INIT_METHOD_NAME = "<init>";
+    protected static final String STATIC_INIT_METHOD_NAME = "<clinit>";
+
+    // Generated class constants
+    protected static final int CLASSFILE_VERSION = 51;
+
+    protected static final int CP_CONST_COUNT = 65400;
+    protected static final int MAX_METHOD_SIZE = 65400;
+    protected static final int BYTES_PER_LDC = 5;
+    protected static final int LDC_PER_METHOD = MAX_METHOD_SIZE / BYTES_PER_LDC;
+    protected static final int METHOD_COUNT = CP_CONST_COUNT / LDC_PER_METHOD;
+
+    protected static final String PARENT_CLASS_NAME = JL_OBJECT;
+
+    protected static final String INIT_METHOD_SIGNATURE = VOID_NO_ARG_METHOD_SIGNATURE;
+
+    protected static final String MAIN_METHOD_NAME = "main";
+    protected static final String MAIN_METHOD_SIGNATURE = "(" + "[" + fd(JL_STRING) + ")V";
+
+    protected static final String TEST_METHOD_NAME = "test";
+    protected static final String TEST_METHOD_SIGNATURE = VOID_NO_ARG_METHOD_SIGNATURE;
+
+    protected static final String STATIC_FIELD_NAME = "testStatic";
+    protected static final String STATIC_FIELD_SIGNATURE = "Z";
+
+    protected static final String INSTANCE_FIELD_NAME = "testInstance";
+    protected static final String INSTANCE_FIELD_SIGNATURE = "Z";
+
+    protected static final String STATIC_BOOTSTRAP_FIELD_NAME = "testCSStatic";
+    protected static final String STATIC_BOOTSTRAP_FIELD_SIGNATURE = fd(JLI_CALLSITE);
+
+    protected static final String INSTANCE_BOOTSTRAP_FIELD_NAME = "testCSInstance";
+    protected static final String INSTANCE_BOOTSTRAP_FIELD_SIGNATURE = fd(JLI_CALLSITE);
+
+    protected static final String BOOTSTRAP_METHOD_NAME = "bootstrap";
+    protected static final String BOOTSTRAP_METHOD_SIGNATURE = "(" +  fd(JLI_METHODHANDLES_LOOKUP) + fd(JL_STRING) + fd(JLI_METHODTYPE) + ")" + fd(JLI_CALLSITE);
+
+    protected static final String INSTANCE_BOOTSTRAP_METHOD_NAME = "bootstrapInstance";
+    protected static final String INSTANCE_BOOTSTRAP_METHOD_SIGNATURE = BOOTSTRAP_METHOD_SIGNATURE;
+
+    protected static final String TARGET_METHOD_NAME = "target";
+    protected static final String TARGET_METHOD_SIGNATURE = VOID_NO_ARG_METHOD_SIGNATURE;
+
+    protected static final String INSTANCE_TARGET_METHOD_NAME = "targetInstance";
+    protected static final String INSTANCE_TARGET_METHOD_SIGNATURE = VOID_NO_ARG_METHOD_SIGNATURE;
+
+    protected interface DummyInterface {
+        public void targetInstance();
+    }
+
+    // Helper methods
+
+    protected static String getDummyInterfaceClassName() {
+        return DummyInterface.class.getName().replace('.', '/');
+    }
+
+    protected static void createLogMsgCode(MethodVisitor mv, String msg) {
+        mv.visitLdcInsn(msg);
+        mv.visitMethodInsn(Opcodes.INVOKESTATIC, "vm/mlvm/share/Env", "traceVerbose", "(Ljava/lang/String;)V");
+    }
+
+    protected static void createThrowRuntimeExceptionCode(MethodVisitor mv, String msg) {
+        createThrowRuntimeExceptionCodeHelper(mv, msg, false);
+    }
+
+    // Expects a throwable (the cause) to be on top of the stack when called.
+    protected static void createThrowRuntimeExceptionCodeWithCause(MethodVisitor mv, String msg) {
+        createThrowRuntimeExceptionCodeHelper(mv, msg, true);
+    }
+
+    // If set_cause is true it expects a Throwable (the cause) to be on top of the stack when called.
+    protected static void createThrowRuntimeExceptionCodeHelper(MethodVisitor mv, String msg, boolean set_cause) {
+        mv.visitTypeInsn(Opcodes.NEW, JL_RUNTIMEEXCEPTION);
+        mv.visitInsn(Opcodes.DUP);
+        mv.visitLdcInsn(msg);
+        mv.visitMethodInsn(Opcodes.INVOKESPECIAL, JL_RUNTIMEEXCEPTION,
+                INIT_METHOD_NAME, "(" + fd(JL_STRING) + ")V");
+        if (set_cause) {
+          mv.visitInsn(Opcodes.SWAP);
+          mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JL_RUNTIMEEXCEPTION,
+                  "initCause", "(" + fd(JL_THROWABLE) + ")"+ fd(JL_THROWABLE));
+        }
+        mv.visitInsn(Opcodes.ATHROW);
+    }
+
+    protected static void createThrowRuntimeExceptionMethod(ClassWriter cw, boolean isStatic, String methodName, String methodSignature) {
+        MethodVisitor mv = cw.visitMethod(
+                Opcodes.ACC_PUBLIC | (isStatic ? Opcodes.ACC_STATIC : 0),
+                methodName, methodSignature,
+                null,
+                new String[0]);
+
+        createThrowRuntimeExceptionCode(mv, "Method " + methodName + methodSignature + " should not be called!");
+
+        mv.visitMaxs(-1,  -1);
+        mv.visitEnd();
+    }
+
+    protected static void finishMethodCode(MethodVisitor mv) {
+        finishMethodCode(mv, Opcodes.RETURN);
+    }
+
+    protected static void finishMethodCode(MethodVisitor mv, int returnOpcode) {
+        mv.visitInsn(returnOpcode);
+        mv.visitMaxs(-1, -1);
+        mv.visitEnd();
+    }
+
+    protected void createClassInitMethod(ClassWriter cw) {
+    }
+
+    protected void createInitMethod(ClassWriter cw) {
+        MethodVisitor mv = cw.visitMethod(
+                Opcodes.ACC_PUBLIC,
+                INIT_METHOD_NAME, INIT_METHOD_SIGNATURE,
+                null,
+                new String[0]);
+
+        mv.visitIntInsn(Opcodes.ALOAD, 0);
+        mv.visitMethodInsn(Opcodes.INVOKESPECIAL,
+                PARENT_CLASS_NAME,
+                INIT_METHOD_NAME, INIT_METHOD_SIGNATURE);
+
+        createLogMsgCode(mv, fullClassName + " constructor called");
+
+        finishMethodCode(mv);
+    }
+
+    protected void createTargetMethod(ClassWriter cw) {
+        MethodVisitor mv = cw.visitMethod(
+                Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC,
+                TARGET_METHOD_NAME, TARGET_METHOD_SIGNATURE,
+                null,
+                new String[0]);
+
+        createLogMsgCode(mv, fullClassName + "." + TARGET_METHOD_NAME + TARGET_METHOD_SIGNATURE + " called");
+
+        finishMethodCode(mv);
+    }
+
+    protected void createBootstrapMethod(ClassWriter cw) {
+         createBootstrapMethod(cw, true, BOOTSTRAP_METHOD_NAME, BOOTSTRAP_METHOD_SIGNATURE);
+    }
+
+    protected void createBootstrapMethod(ClassWriter cw, boolean isStatic, String methodName, String methodSignature) {
+        MethodVisitor mv = cw.visitMethod(
+                (isStatic ? Opcodes.ACC_STATIC : 0) | Opcodes.ACC_PUBLIC,
+                methodName, methodSignature,
+                null, new String[0]);
+
+        createLogMsgCode(mv, fullClassName + "." + BOOTSTRAP_METHOD_NAME + BOOTSTRAP_METHOD_SIGNATURE + " called");
+
+        int argShift = isStatic ? 0 : 1;
+
+        mv.visitTypeInsn(Opcodes.NEW, JLI_CONSTANTCALLSITE);
+        mv.visitInsn(Opcodes.DUP);
+        mv.visitVarInsn(Opcodes.ALOAD, 0 + argShift);
+        mv.visitLdcInsn(Type.getObjectType(fullClassName));
+        mv.visitVarInsn(Opcodes.ALOAD, 1 + argShift);
+        mv.visitVarInsn(Opcodes.ALOAD, 2 + argShift);
+        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
+                JLI_METHODHANDLES_LOOKUP, "findStatic",
+                "(" + fd(JL_CLASS) + fd(JL_STRING) + fd(JLI_METHODTYPE) + ")" + fd(JLI_METHODHANDLE));
+        mv.visitMethodInsn(Opcodes.INVOKESPECIAL, JLI_CONSTANTCALLSITE,
+                INIT_METHOD_NAME, "(" + fd(JLI_METHODHANDLE) + ")V");
+
+        finishMethodCode(mv, Opcodes.ARETURN);
+    }
+
+    @Override
+    public Klass[] generateBytecodes() {
+
+        // COMPUTE_FRAMES were disabled due to JDK-8079697
+        ClassWriterExt cw = new ClassWriterExt(/*ClassWriter.COMPUTE_FRAMES |*/ ClassWriter.COMPUTE_MAXS);
+
+        String[] interfaces = new String[1];
+        interfaces[0] = getDummyInterfaceClassName();
+        cw.visit(CLASSFILE_VERSION, Opcodes.ACC_PUBLIC, fullClassName, null, PARENT_CLASS_NAME, interfaces);
+
+        generateCommonData(cw);
+
+        MethodVisitor mainMV = cw.visitMethod(
+                Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC,
+                MAIN_METHOD_NAME, MAIN_METHOD_SIGNATURE,
+                null, new String[0]);
+
+        mainMV.visitTypeInsn(Opcodes.NEW, fullClassName);
+        mainMV.visitInsn(Opcodes.DUP);
+        mainMV.visitMethodInsn(Opcodes.INVOKESPECIAL, fullClassName, INIT_METHOD_NAME, INIT_METHOD_SIGNATURE);
+
+        int constCount = 0;
+        int methodNum = 0;
+
+        // TODO: check real CP size and also limit number of iterations in this cycle
+        while (constCount < CP_CONST_COUNT) {
+            final String methodName = TEST_METHOD_NAME + String.format("%02d", methodNum);
+
+            MethodVisitor mw = cw.visitMethod(
+                    Opcodes.ACC_PUBLIC,
+                    methodName, TEST_METHOD_SIGNATURE,
+                    null, new String[0]);
+
+            generateTestMethodProlog(mw);
+
+            // TODO: check real CP size and also limit number of iterations in this cycle
+            while (constCount < CP_CONST_COUNT && cw.getBytecodeLength(mw) < MAX_METHOD_SIZE) {
+                generateCPEntryData(cw, mw);
+                ++constCount;
+            }
+
+            generateTestMethodEpilog(mw);
+
+            mw.visitMaxs(-1, -1);
+            mw.visitEnd();
+
+            Env.traceNormal("Method " + fullClassName + "." + methodName + "(): "
+                          + constCount + " constants in CP, "
+                          + cw.getBytecodeLength(mw) + " bytes of code");
+
+            mainMV.visitInsn(Opcodes.DUP);
+            mainMV.visitMethodInsn(Opcodes.INVOKEVIRTUAL, fullClassName, methodName, TEST_METHOD_SIGNATURE);
+
+            ++methodNum;
+        }
+
+        mainMV.visitInsn(Opcodes.POP);
+        finishMethodCode(mainMV);
+
+        cw.visitEnd();
+        return new Klass[] { new Klass(this.pkgName, this.shortClassName, MAIN_METHOD_NAME, MAIN_METHOD_SIGNATURE, cw.toByteArray()) };
+    }
+
+    protected void generateCommonData(ClassWriterExt cw) {
+        createClassInitMethod(cw);
+        createInitMethod(cw);
+        createTargetMethod(cw);
+        createBootstrapMethod(cw);
+    }
+
+    protected void generateTestMethodProlog(MethodVisitor mw) {
+    }
+
+    protected abstract void generateCPEntryData(ClassWriter cw, MethodVisitor mw);
+
+    protected void generateTestMethodEpilog(MethodVisitor mw) {
+        mw.visitInsn(Opcodes.RETURN);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyCorrectBootstrap.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.cp.share;
+
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.ClassWriterExt;
+import jdk.internal.org.objectweb.asm.Handle;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.org.objectweb.asm.Opcodes;
+import jdk.internal.org.objectweb.asm.Type;
+
+import vm.mlvm.share.ClassfileGenerator;
+import vm.mlvm.share.Env;
+
+public class GenManyIndyCorrectBootstrap extends GenFullCP {
+
+    /**
+     * Generates a class file and writes it to a file
+     * @see vm.mlvm.share.ClassfileGenerator
+     * @param args Parameters for ClassfileGenerator.main() method
+     */
+    public static void main(String[] args) {
+        ClassfileGenerator.main(args);
+    }
+
+    /**
+     * Creates static init method, which constructs a call site object, which refers to the target method
+     * and invokes Dummy.setMH() on this call site
+     * @param cw Class writer object
+     */
+    @Override
+    protected void createClassInitMethod(ClassWriter cw) {
+        MethodVisitor mw = cw.visitMethod(
+                Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC,
+                STATIC_INIT_METHOD_NAME, INIT_METHOD_SIGNATURE,
+                null,
+                new String[0]);
+
+        mw.visitMethodInsn(Opcodes.INVOKESTATIC, JLI_METHODHANDLES, "lookup", "()" + fd(JLI_METHODHANDLES_LOOKUP));
+        mw.visitLdcInsn(Type.getObjectType(fullClassName));
+        mw.visitLdcInsn(TARGET_METHOD_NAME);
+        mw.visitLdcInsn(TARGET_METHOD_SIGNATURE);
+        mw.visitLdcInsn(Type.getObjectType(fullClassName));
+        mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JL_CLASS,
+                "getClassLoader", "()" + fd(JL_CLASSLOADER));
+        mw.visitMethodInsn(Opcodes.INVOKESTATIC, JLI_METHODTYPE,
+                "fromMethodDescriptorString", "(" + fd(JL_STRING) + fd(JL_CLASSLOADER) + ")" + fd(JLI_METHODTYPE));
+        mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JLI_METHODHANDLES_LOOKUP,
+                "findStatic", "(" + fd(JL_CLASS) + fd(JL_STRING) + fd(JLI_METHODTYPE) + ")" + fd(JLI_METHODHANDLE));
+        mw.visitMethodInsn(Opcodes.INVOKESTATIC, NEW_INVOKE_SPECIAL_CLASS_NAME,
+                "setMH", "(" + fd(JLI_METHODHANDLE) + ")V");
+
+        finishMethodCode(mw);
+    }
+
+    /**
+     * Disables invoke dynamic CP entry caching and generate default common data
+     * @param cw Class writer object
+     */
+    @Override
+    protected void generateCommonData(ClassWriterExt cw) {
+        cw.setCacheInvokeDynamic(false);
+        super.generateCommonData(cw);
+    }
+
+    /**
+     * Generates an invokedynamic instruction (plus CP entry)
+     * which has a valid reference kind in the CP method handle entry for the bootstrap method
+     * @param cw Class writer object
+     * @param mw Method writer object
+     */
+    @Override
+    protected void generateCPEntryData(ClassWriter cw, MethodVisitor mw) {
+        Handle bsm;
+        if (Env.getRNG().nextBoolean()) {
+            bsm = new Handle(Opcodes.H_NEWINVOKESPECIAL,
+                    NEW_INVOKE_SPECIAL_CLASS_NAME,
+                    INIT_METHOD_NAME,
+                    NEW_INVOKE_SPECIAL_BOOTSTRAP_METHOD_SIGNATURE);
+        } else {
+            bsm = new Handle(Opcodes.H_INVOKESTATIC,
+                    this.fullClassName,
+                    BOOTSTRAP_METHOD_NAME,
+                    BOOTSTRAP_METHOD_SIGNATURE);
+        }
+        mw.visitInvokeDynamicInsn(TARGET_METHOD_NAME,
+                TARGET_METHOD_SIGNATURE,
+                bsm);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyIncorrectBootstrap.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,274 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.cp.share;
+
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.ClassWriterExt;
+import jdk.internal.org.objectweb.asm.Handle;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.org.objectweb.asm.Opcodes;
+import jdk.internal.org.objectweb.asm.Type;
+import jdk.internal.org.objectweb.asm.Label;
+
+import vm.mlvm.share.ClassfileGenerator;
+import vm.mlvm.share.Env;
+
+public class GenManyIndyIncorrectBootstrap extends GenFullCP {
+
+    /**
+     * Generates a class file and writes it to a file
+     * @see vm.mlvm.share.ClassfileGenerator
+     * @param args Parameters for ClassfileGenerator.main() method
+     */
+    public static void main(String[] args) {
+        ClassfileGenerator.main(args);
+    }
+
+    /**
+     * Create class constructor, which
+     * create a call site for target method
+     * and puts it into static and instance fields
+     * @param cw Class writer object
+     */
+    @Override
+    protected void createInitMethod(ClassWriter cw) {
+        MethodVisitor mw = cw.visitMethod(
+                Opcodes.ACC_PUBLIC,
+                INIT_METHOD_NAME, INIT_METHOD_SIGNATURE,
+                null,
+                new String[0]);
+
+        mw.visitVarInsn(Opcodes.ALOAD, 0);
+        mw.visitMethodInsn(Opcodes.INVOKESPECIAL, PARENT_CLASS_NAME,
+                INIT_METHOD_NAME, INIT_METHOD_SIGNATURE);
+
+        // Create a call site for the target method and store it into bootstrap fields
+        mw.visitVarInsn(Opcodes.ALOAD, 0);
+        mw.visitTypeInsn(Opcodes.NEW, JLI_CONSTANTCALLSITE);
+        mw.visitInsn(Opcodes.DUP);
+        mw.visitMethodInsn(Opcodes.INVOKESTATIC, JLI_METHODHANDLES,
+                "lookup", "()" + fd(JLI_METHODHANDLES_LOOKUP));
+        mw.visitLdcInsn(Type.getObjectType(fullClassName));
+        mw.visitLdcInsn(TARGET_METHOD_NAME);
+        mw.visitLdcInsn(TARGET_METHOD_SIGNATURE);
+        mw.visitLdcInsn(Type.getObjectType(fullClassName));
+        mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JL_CLASS,
+                "getClassLoader", "()" + fd(JL_CLASSLOADER));
+        mw.visitMethodInsn(Opcodes.INVOKESTATIC, JLI_METHODTYPE,
+                "fromMethodDescriptorString", "(" + fd(JL_STRING) + fd(JL_CLASSLOADER) + ")" + fd(JLI_METHODTYPE));
+        mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JLI_METHODHANDLES_LOOKUP,
+                "findStatic", "(" + fd(JL_CLASS) + fd(JL_STRING) + fd(JLI_METHODTYPE) + ")" + fd(JLI_METHODHANDLE));
+        mw.visitMethodInsn(Opcodes.INVOKESPECIAL, JLI_CONSTANTCALLSITE,
+                INIT_METHOD_NAME, "(" + fd(JLI_METHODHANDLE) + ")V");
+        mw.visitInsn(Opcodes.DUP);
+        mw.visitFieldInsn(Opcodes.PUTSTATIC, fullClassName, STATIC_BOOTSTRAP_FIELD_NAME, STATIC_BOOTSTRAP_FIELD_SIGNATURE);
+        mw.visitFieldInsn(Opcodes.PUTFIELD, fullClassName, INSTANCE_BOOTSTRAP_FIELD_NAME, INSTANCE_BOOTSTRAP_FIELD_SIGNATURE);
+
+        finishMethodCode(mw);
+    }
+
+    /**
+     * Creates a target method which always throw. It should not be called,
+     * since all invokedynamic instructions have invalid bootstrap method types
+     * @param cw Class writer object
+     */
+    @Override
+    protected void createTargetMethod(ClassWriter cw) {
+        createThrowRuntimeExceptionMethod(cw, true, TARGET_METHOD_NAME, TARGET_METHOD_SIGNATURE);
+    }
+
+    /**
+     * Creates a bootstrap method which always throw. It should not be called,
+     * since all invokedynamic instructions have invalid bootstrap method types
+     * @param cw Class writer object
+     */
+    @Override
+    protected void createBootstrapMethod(ClassWriter cw) {
+        createThrowRuntimeExceptionMethod(cw, true, BOOTSTRAP_METHOD_NAME, BOOTSTRAP_METHOD_SIGNATURE);
+    }
+
+    /**
+     * Generates common data for class plus two fields that hold CallSite
+     * and used as bootstrap targets
+     * @param cw Class writer object
+     */
+    @Override
+    protected void generateCommonData(ClassWriterExt cw) {
+        cw.setCacheInvokeDynamic(false);
+
+        cw.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC,
+                STATIC_BOOTSTRAP_FIELD_NAME,
+                STATIC_BOOTSTRAP_FIELD_SIGNATURE, null, null);
+
+        cw.visitField(Opcodes.ACC_PUBLIC,
+                INSTANCE_BOOTSTRAP_FIELD_NAME,
+                INSTANCE_BOOTSTRAP_FIELD_SIGNATURE, null, null);
+
+        super.generateCommonData(cw);
+
+        createThrowRuntimeExceptionMethod(cw, false, INSTANCE_BOOTSTRAP_METHOD_NAME, INSTANCE_BOOTSTRAP_METHOD_SIGNATURE);
+    }
+
+    Label throwMethodLabel;
+
+    // The exception to expect that is wrapped in a BootstrapMethodError
+    static final String WRAPPED_EXCEPTION = "java/lang/invoke/WrongMethodTypeException";
+
+    // The error to expect that is not wrapped in a BootstrapMethodError and
+    // is thrown directly
+    static final String DIRECT_ERROR = "java/lang/IncompatibleClassChangeError";
+
+    /**
+     * Generates an invokedynamic instruction (plus CP entry)
+     * which has invalid reference kind in the CP method handle entry for the bootstrap method
+     * @param cw Class writer object
+     * @param mw Method writer object
+     */
+    @Override
+    protected void generateCPEntryData(ClassWriter cw, MethodVisitor mw) {
+        HandleType[] types = HandleType.values();
+        HandleType type = types[Env.getRNG().nextInt(types.length)];
+
+        switch (type) {
+            case GETFIELD:
+            case PUTFIELD:
+            case GETSTATIC:
+            case PUTSTATIC:
+            case INVOKESPECIAL:
+            case INVOKEVIRTUAL:
+            case INVOKEINTERFACE:
+                // Handle these cases
+                break;
+            default:
+                // And don't generate code for all other cases
+                return;
+        }
+
+        Label indyThrowableBegin = new Label();
+        Label indyThrowableEnd = new Label();
+        Label catchThrowableLabel = new Label();
+
+        Label indyBootstrapBegin = new Label();
+        Label indyBootstrapEnd = new Label();
+        Label catchBootstrapLabel = new Label();
+
+        mw.visitTryCatchBlock(indyBootstrapBegin, indyBootstrapEnd, catchBootstrapLabel, JL_BOOTSTRAPMETHODERROR);
+        mw.visitLabel(indyBootstrapBegin);
+
+        mw.visitTryCatchBlock(indyThrowableBegin, indyThrowableEnd, catchThrowableLabel, JL_THROWABLE);
+        mw.visitLabel(indyThrowableBegin);
+
+        Handle bsm;
+        switch (type) {
+            case GETFIELD:
+            case PUTFIELD:
+                bsm = new Handle(type.asmTag,
+                        fullClassName,
+                        INSTANCE_BOOTSTRAP_FIELD_NAME,
+                        INSTANCE_BOOTSTRAP_FIELD_SIGNATURE);
+                break;
+            case GETSTATIC:
+            case PUTSTATIC:
+                bsm = new Handle(type.asmTag,
+                        fullClassName,
+                        STATIC_BOOTSTRAP_FIELD_NAME,
+                        STATIC_BOOTSTRAP_FIELD_SIGNATURE);
+                break;
+            case INVOKESPECIAL:
+            case INVOKEVIRTUAL:
+            case INVOKEINTERFACE:
+                bsm = new Handle(type.asmTag,
+                        fullClassName,
+                        INSTANCE_BOOTSTRAP_METHOD_NAME,
+                        INSTANCE_BOOTSTRAP_METHOD_SIGNATURE);
+                break;
+            default:
+                throw new Error("Unexpected handle type " + type);
+        }
+
+        mw.visitInvokeDynamicInsn(TARGET_METHOD_NAME,
+                TARGET_METHOD_SIGNATURE,
+                bsm);
+
+        mw.visitLabel(indyBootstrapEnd);
+        mw.visitLabel(indyThrowableEnd);
+
+        // No exception at all, throw error
+        Label throwLabel = new Label();
+        mw.visitJumpInsn(Opcodes.GOTO, throwLabel);
+
+        // JDK-8079697 workaround: we have to generate stackmaps manually
+        mw.visitFrame(Opcodes.F_SAME1, 0, new Object[0], 1, new Object[] { JL_BOOTSTRAPMETHODERROR });
+
+        // Got a bootstrapmethoderror as expected, check that it is wrapping what we expect
+        mw.visitLabel(catchBootstrapLabel);
+
+        // Save error in case we need to rethrow it
+        mw.visitInsn(Opcodes.DUP);
+        mw.visitVarInsn(Opcodes.ASTORE, 1);
+        mw.visitMethodInsn(Opcodes.INVOKEVIRTUAL, JL_THROWABLE, "getCause", "()" + fd(JL_THROWABLE));
+
+        // If it is the expected exception, goto next block
+        mw.visitTypeInsn(Opcodes.INSTANCEOF, WRAPPED_EXCEPTION);
+        Label nextBlockLabel = new Label();
+        mw.visitJumpInsn(Opcodes.IFNE, nextBlockLabel);
+
+        // Not the exception we were expectiong, throw error
+        mw.visitVarInsn(Opcodes.ALOAD, 1); // Use full chain as cause
+        createThrowRuntimeExceptionCodeWithCause(mw,
+                "invokedynamic got an unexpected wrapped exception (expected " + WRAPPED_EXCEPTION
+                + ", bootstrap type=" + type
+                + ", opcode=" + type.asmTag + ")!");
+
+        // JDK-8079697 workaround: we have to generate stackmaps manually
+        mw.visitFrame(Opcodes.F_SAME1, 0, new Object[0], 1, new Object[] { JL_THROWABLE });
+        mw.visitLabel(catchThrowableLabel);
+
+        // Save error in case we need to rethrow it
+        mw.visitInsn(Opcodes.DUP);
+        mw.visitVarInsn(Opcodes.ASTORE, 1);
+
+        // If it is the expected exception, goto next block
+        mw.visitTypeInsn(Opcodes.INSTANCEOF, DIRECT_ERROR);
+        mw.visitJumpInsn(Opcodes.IFNE, nextBlockLabel);
+
+        // Not the exception we were expectiong, throw error
+        mw.visitVarInsn(Opcodes.ALOAD, 1); // Use full chain as cause
+        createThrowRuntimeExceptionCodeWithCause(mw,
+                "invokedynamic got an unexpected exception (expected " + DIRECT_ERROR
+                + ", bootstrap type" + type
+                + ", opcode=" + type.asmTag + ")!");
+
+        // JDK-8079697 workaround: we have to generate stackmaps manually
+        mw.visitFrame(Opcodes.F_CHOP, 0, new Object[0], 0, new Object[0]);
+
+        // Unable to place this code once in the method epilog due to bug in ASM
+        mw.visitLabel(throwLabel);
+        createThrowRuntimeExceptionCode(mw,
+                "invokedynamic should always throw (bootstrap type" + type +", opcode=" + type.asmTag + ")!");
+
+        mw.visitFrame(Opcodes.F_SAME, 0, new Object[0], 0, new Object[0]);
+        mw.visitLabel(nextBlockLabel);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/GenManyIndyOneCPX.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.cp.share;
+
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import jdk.internal.org.objectweb.asm.MethodVisitor;
+import jdk.internal.org.objectweb.asm.Opcodes;
+import jdk.internal.org.objectweb.asm.Handle;
+
+import vm.mlvm.share.ClassfileGenerator;
+
+public class GenManyIndyOneCPX extends GenFullCP {
+
+    public static void main(String[] args) {
+        ClassfileGenerator.main(args);
+    }
+
+    @Override
+    protected void generateCPEntryData(ClassWriter cw, MethodVisitor mw) {
+        Handle bsm = new Handle(Opcodes.H_INVOKESTATIC,
+                fullClassName,
+                BOOTSTRAP_METHOD_NAME,
+                BOOTSTRAP_METHOD_SIGNATURE);
+
+        mw.visitInvokeDynamicInsn(TARGET_METHOD_NAME,
+                TARGET_METHOD_SIGNATURE,
+                bsm);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/share/HandleType.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.cp.share;
+
+import jdk.internal.org.objectweb.asm.Opcodes;
+
+public enum HandleType {
+    GETFIELD(Opcodes.H_GETFIELD),
+    PUTFIELD(Opcodes.H_PUTFIELD),
+    GETSTATIC(Opcodes.H_GETSTATIC),
+    PUTSTATIC(Opcodes.H_PUTSTATIC),
+    NEWINVOKESPECIAL(Opcodes.H_NEWINVOKESPECIAL),
+    INVOKESTATIC(Opcodes.H_INVOKESTATIC),
+    INVOKEINTERFACE(Opcodes.H_INVOKEINTERFACE),
+    INVOKESPECIAL(Opcodes.H_INVOKESPECIAL),
+    INVOKEVIRTUAL(Opcodes.H_INVOKEVIRTUAL);
+
+    public final int asmTag;
+    private HandleType(int asmTag) {
+        this.asmTag = asmTag;
+    }
+}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/correctBootstrap/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.org.objectweb.asm
+ *
+ * @summary converted from VM Testbase vm/mlvm/cp/stress/classfmt/correctBootstrap.
+ * VM Testbase keywords: [feature_mlvm]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Create a constant pool, which contains maximum number of invokedynamic constants and corresponding
+ *     invokedynamic commands that refer to correct bootstrap method types. Verify that bootstrap/target
+ *     methods are invoked. The maximum number of invokedynamic calls is determined dynamically.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *          /vmTestbase/vm/mlvm/patches
+ *
+ * @comment patch for java.base
+ * @build java.base/*
+ *
+ * @comment build generator
+ * @build vm.mlvm.cp.share.GenManyIndyCorrectBootstrap
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.share.ClassfileGeneratorTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.share.ClassfileGeneratorTest
+ *      -generator vm.mlvm.cp.share.GenManyIndyCorrectBootstrap
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/incorrectBootstrap/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.org.objectweb.asm
+ *
+ * @summary converted from VM Testbase vm/mlvm/cp/stress/classfmt/incorrectBootstrap.
+ * VM Testbase keywords: [feature_mlvm]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Create a constant pool, which contains maximum number of invokedynamic constants and corresponding
+ *     invokedynamic commands that refer to incorrect bootstrap method types. Verify that appropriate
+ *     exception is thrown for each invokedynamic command and bootstrap/target methods are never invoked.
+ *     The maximum number of invokedynamic calls is determined dynamically.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *          /vmTestbase/vm/mlvm/patches
+ *
+ * @comment patch for java.base
+ * @build java.base/*
+ *
+ * @comment build generator
+ * @build vm.mlvm.cp.share.GenManyIndyIncorrectBootstrap
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.share.ClassfileGeneratorTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.share.ClassfileGeneratorTest
+ *      -generator vm.mlvm.cp.share.GenManyIndyIncorrectBootstrap
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/manyIndyOneCPX/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/manyIndyOneCPX/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.org.objectweb.asm
+ *
+ * @summary converted from VM Testbase vm/mlvm/cp/stress/classfmt/manyIndyOneCPX.
+ * VM Testbase keywords: [feature_mlvm, hangup, nonconcurrent, exclude]
+ * VM Testbase comments: 8199227
+ * VM Testbase readme:
+ * DESCRIPTION
+ *        The test creates and executes a class containing lot of invokedynamic instructions
+ *        pointing to just one constant pool CONSTANT_InvokeDynamic entry.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *          /vmTestbase/vm/mlvm/patches
+ *
+ * @comment patch for java.base
+ * @build java.base/*
+ *
+ * @comment build generator
+ * @build vm.mlvm.cp.share.GenManyIndyOneCPX
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ * @ignore 8199227
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.share.ClassfileGeneratorTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.share.ClassfileGeneratorTest
+ *      -generator vm.mlvm.cp.share.GenManyIndyOneCPX
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mh/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mh/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.org.objectweb.asm
+ *
+ * @summary converted from VM Testbase vm/mlvm/cp/stress/classfmt/mh.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Create a constant pool, which contains maximum number of method handle constants and corresponding
+ *     ldc commands. Verify that the class is loaded without errors.
+ *     The maximum is determined dynamically.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *          /vmTestbase/vm/mlvm/patches
+ *
+ * @comment patch for java.base
+ * @build java.base/*
+ *
+ * @comment build generator
+ * @build vm.mlvm.cp.share.GenCPFullOfMH
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.share.ClassfileGeneratorTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.share.ClassfileGeneratorTest -generator vm.mlvm.cp.share.GenCPFullOfMH
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mt/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/cp/stress/classfmt/mt/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.org.objectweb.asm
+ *
+ * @summary converted from VM Testbase vm/mlvm/cp/stress/classfmt/mt.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Create a constant pool, which contains maximum number of method type constants and corresponding
+ *     ldc commands. Verify that the class is loaded without errors.
+ *     The maximum is determined dynamically.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *          /vmTestbase/vm/mlvm/patches
+ *
+ * @comment patch for java.base
+ * @build java.base/*
+ *
+ * @comment build generator
+ * @build vm.mlvm.cp.share.GenCPFullOfMT
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.share.ClassfileGeneratorTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.share.ClassfileGeneratorTest -generator vm.mlvm.cp.share.GenCPFullOfMT
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,1935 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// generated from vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.jmpp
+
+package vm.mlvm.indy.func.java.rawRetypes;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+ public class INDIFY_Test6998541 {
+     private static final int N = 100000;
+
+
+     public static void main(String[] args) throws Throwable {
+         doboolean ();
+         dobyte ();
+         dochar ();
+         doshort ();
+         doint ();
+         dolong ();
+         dofloat ();
+         dodouble ();
+     }
+
+     private static void doboolean () throws Throwable {
+         System.out.println("doboolean");
+
+         for (int i = 0; i < N; i++ ) {
+             boolean2prim(false);
+             boolean2prim(true);
+
+         }
+     }
+     private static void dobyte () throws Throwable {
+         System.out.println("dobyte");
+
+         byte x = Byte.MIN_VALUE;
+         byte D = Byte.MAX_VALUE / (N / 2);
+         for (int i = 0; i < N; i++, x += D) {
+             byte2prim(x);
+
+
+         }
+     }
+     private static void dochar () throws Throwable {
+         System.out.println("dochar");
+
+         char x = Character.MIN_VALUE;
+         char D = Character.MAX_VALUE / (N / 2);
+         for (int i = 0; i < N; i++, x += D) {
+             char2prim(x);
+
+
+         }
+     }
+     private static void doshort () throws Throwable {
+         System.out.println("doshort");
+
+         short x = Short.MIN_VALUE;
+         short D = Short.MAX_VALUE / (N / 2);
+         for (int i = 0; i < N; i++, x += D) {
+             short2prim(x);
+
+
+         }
+     }
+     private static void doint () throws Throwable {
+         System.out.println("doint");
+
+         int x = Integer.MIN_VALUE;
+         int D = Integer.MAX_VALUE / (N / 2);
+         for (int i = 0; i < N; i++, x += D) {
+             int2prim(x);
+
+             void2prim(x);
+             prim2void(x);
+             prim2prim(x);
+
+         }
+     }
+     private static void dolong () throws Throwable {
+         System.out.println("dolong");
+
+         long x = Long.MIN_VALUE;
+         long D = Long.MAX_VALUE / (N / 2);
+         for (int i = 0; i < N; i++, x += D) {
+             long2prim(x);
+
+
+         }
+     }
+     private static void dofloat () throws Throwable {
+         System.out.println("dofloat");
+
+         float x = Float.MIN_VALUE;
+         float D = Float.MAX_VALUE / (N / 2);
+         for (int i = 0; i < N; i++, x += D) {
+             float2prim(x);
+
+
+         }
+     }
+     private static void dodouble () throws Throwable {
+         System.out.println("dodouble");
+
+         double x = Double.MIN_VALUE;
+         double D = Double.MAX_VALUE / (N / 2);
+         for (int i = 0; i < N; i++, x += D) {
+             double2prim(x);
+
+
+         }
+     }
+
+     private static void void2prim(int i) throws Throwable {
+         assertEquals(        false, (boolean) INDY_boolean_foo_void().invokeExact());  // void -> boolean
+         assertEquals(        0, (byte) INDY_byte_foo_void().invokeExact());  // void -> byte
+         assertEquals(        0, (char) INDY_char_foo_void().invokeExact());  // void -> char
+         assertEquals(        0, (short) INDY_short_foo_void().invokeExact());  // void -> short
+         assertEquals(        0, (int) INDY_int_foo_void().invokeExact());  // void -> int
+         assertEquals(        0L, (long) INDY_long_foo_void().invokeExact());  // void -> long
+         assertEquals(        0f, (float) INDY_float_foo_void().invokeExact());  // void -> float
+         assertEquals(        0d, (double) INDY_double_foo_void().invokeExact());  // void -> double
+     }
+
+     private static void boolean2prim(boolean x) throws Throwable {
+         int i = x ? 1 : 0;
+             boolean z = x;
+         assertEquals(z, (boolean) INDY_boolean_foo_boolean().invokeExact(x));  // boolean -> boolean
+         assertEquals((byte) i, (byte) INDY_byte_foo_boolean().invokeExact(x));  // boolean -> byte
+         assertEquals((char) i, (char) INDY_char_foo_boolean().invokeExact(x));  // boolean -> char
+         assertEquals((short) i, (short) INDY_short_foo_boolean().invokeExact(x));  // boolean -> short
+         assertEquals((int) i, (int) INDY_int_foo_boolean().invokeExact(x));  // boolean -> int
+         assertEquals((long) i, (long) INDY_long_foo_boolean().invokeExact(x));  // boolean -> long
+         assertEquals((float) i, (float) INDY_float_foo_boolean().invokeExact(x));  // boolean -> float
+         assertEquals((double) i, (double) INDY_double_foo_boolean().invokeExact(x));  // boolean -> double
+     }
+     private static void byte2prim(byte x) throws Throwable {
+         byte i = x;
+             boolean z = (x != 0);
+         assertEquals(z, (boolean) INDY_boolean_foo_byte().invokeExact(x));  // byte -> boolean
+         assertEquals((byte) i, (byte) INDY_byte_foo_byte().invokeExact(x));  // byte -> byte
+         assertEquals((char) i, (char) INDY_char_foo_byte().invokeExact(x));  // byte -> char
+         assertEquals((short) i, (short) INDY_short_foo_byte().invokeExact(x));  // byte -> short
+         assertEquals((int) i, (int) INDY_int_foo_byte().invokeExact(x));  // byte -> int
+         assertEquals((long) i, (long) INDY_long_foo_byte().invokeExact(x));  // byte -> long
+         assertEquals((float) i, (float) INDY_float_foo_byte().invokeExact(x));  // byte -> float
+         assertEquals((double) i, (double) INDY_double_foo_byte().invokeExact(x));  // byte -> double
+     }
+     private static void char2prim(char x) throws Throwable {
+         char i = x;
+             boolean z = (x != 0);
+         assertEquals(z, (boolean) INDY_boolean_foo_char().invokeExact(x));  // char -> boolean
+         assertEquals((byte) i, (byte) INDY_byte_foo_char().invokeExact(x));  // char -> byte
+         assertEquals((char) i, (char) INDY_char_foo_char().invokeExact(x));  // char -> char
+         assertEquals((short) i, (short) INDY_short_foo_char().invokeExact(x));  // char -> short
+         assertEquals((int) i, (int) INDY_int_foo_char().invokeExact(x));  // char -> int
+         assertEquals((long) i, (long) INDY_long_foo_char().invokeExact(x));  // char -> long
+         assertEquals((float) i, (float) INDY_float_foo_char().invokeExact(x));  // char -> float
+         assertEquals((double) i, (double) INDY_double_foo_char().invokeExact(x));  // char -> double
+     }
+     private static void short2prim(short x) throws Throwable {
+         short i = x;
+             boolean z = (x != 0);
+         assertEquals(z, (boolean) INDY_boolean_foo_short().invokeExact(x));  // short -> boolean
+         assertEquals((byte) i, (byte) INDY_byte_foo_short().invokeExact(x));  // short -> byte
+         assertEquals((char) i, (char) INDY_char_foo_short().invokeExact(x));  // short -> char
+         assertEquals((short) i, (short) INDY_short_foo_short().invokeExact(x));  // short -> short
+         assertEquals((int) i, (int) INDY_int_foo_short().invokeExact(x));  // short -> int
+         assertEquals((long) i, (long) INDY_long_foo_short().invokeExact(x));  // short -> long
+         assertEquals((float) i, (float) INDY_float_foo_short().invokeExact(x));  // short -> float
+         assertEquals((double) i, (double) INDY_double_foo_short().invokeExact(x));  // short -> double
+     }
+     private static void int2prim(int x) throws Throwable {
+         int i = x;
+             boolean z = (x != 0);
+         assertEquals(z, (boolean) INDY_boolean_foo_int().invokeExact(x));  // int -> boolean
+         assertEquals((byte) i, (byte) INDY_byte_foo_int().invokeExact(x));  // int -> byte
+         assertEquals((char) i, (char) INDY_char_foo_int().invokeExact(x));  // int -> char
+         assertEquals((short) i, (short) INDY_short_foo_int().invokeExact(x));  // int -> short
+         assertEquals((int) i, (int) INDY_int_foo_int().invokeExact(x));  // int -> int
+         assertEquals((long) i, (long) INDY_long_foo_int().invokeExact(x));  // int -> long
+         assertEquals((float) i, (float) INDY_float_foo_int().invokeExact(x));  // int -> float
+         assertEquals((double) i, (double) INDY_double_foo_int().invokeExact(x));  // int -> double
+     }
+     private static void long2prim(long x) throws Throwable {
+         long i = x;
+             boolean z = (x != 0);
+         assertEquals(z, (boolean) INDY_boolean_foo_long().invokeExact(x));  // long -> boolean
+         assertEquals((byte) i, (byte) INDY_byte_foo_long().invokeExact(x));  // long -> byte
+         assertEquals((char) i, (char) INDY_char_foo_long().invokeExact(x));  // long -> char
+         assertEquals((short) i, (short) INDY_short_foo_long().invokeExact(x));  // long -> short
+         assertEquals((int) i, (int) INDY_int_foo_long().invokeExact(x));  // long -> int
+         assertEquals((long) i, (long) INDY_long_foo_long().invokeExact(x));  // long -> long
+         assertEquals((float) i, (float) INDY_float_foo_long().invokeExact(x));  // long -> float
+         assertEquals((double) i, (double) INDY_double_foo_long().invokeExact(x));  // long -> double
+     }
+     private static void float2prim(float x) throws Throwable {
+         float i = x;
+             boolean z = (x != 0);
+         assertEquals(z, (boolean) INDY_boolean_foo_float().invokeExact(x));  // float -> boolean
+         assertEquals((byte) i, (byte) INDY_byte_foo_float().invokeExact(x));  // float -> byte
+         assertEquals((char) i, (char) INDY_char_foo_float().invokeExact(x));  // float -> char
+         assertEquals((short) i, (short) INDY_short_foo_float().invokeExact(x));  // float -> short
+         assertEquals((int) i, (int) INDY_int_foo_float().invokeExact(x));  // float -> int
+         assertEquals((long) i, (long) INDY_long_foo_float().invokeExact(x));  // float -> long
+         assertEquals((float) i, (float) INDY_float_foo_float().invokeExact(x));  // float -> float
+         assertEquals((double) i, (double) INDY_double_foo_float().invokeExact(x));  // float -> double
+     }
+     private static void double2prim(double x) throws Throwable {
+         double i = x;
+             boolean z = (x != 0);
+         assertEquals(z, (boolean) INDY_boolean_foo_double().invokeExact(x));  // double -> boolean
+         assertEquals((byte) i, (byte) INDY_byte_foo_double().invokeExact(x));  // double -> byte
+         assertEquals((char) i, (char) INDY_char_foo_double().invokeExact(x));  // double -> char
+         assertEquals((short) i, (short) INDY_short_foo_double().invokeExact(x));  // double -> short
+         assertEquals((int) i, (int) INDY_int_foo_double().invokeExact(x));  // double -> int
+         assertEquals((long) i, (long) INDY_long_foo_double().invokeExact(x));  // double -> long
+         assertEquals((float) i, (float) INDY_float_foo_double().invokeExact(x));  // double -> float
+         assertEquals((double) i, (double) INDY_double_foo_double().invokeExact(x));  // double -> double
+     }
+
+     private static void prim2void(int x) throws Throwable {
+             boolean z = (x != 0);
+              INDY_void_foo_boolean().invokeExact(z);  // boolean -> void
+              INDY_void_foo_byte().invokeExact((byte) x);  // byte -> void
+              INDY_void_foo_char().invokeExact((char) x);  // char -> void
+              INDY_void_foo_short().invokeExact((short) x);  // short -> void
+              INDY_void_foo_int().invokeExact((int) x);  // int -> void
+              INDY_void_foo_long().invokeExact((long) x);  // long -> void
+              INDY_void_foo_float().invokeExact((float) x);  // float -> void
+              INDY_void_foo_double().invokeExact((double) x);  // double -> void
+     }
+
+     private static void void2void() throws Throwable {
+         INDY_void_foo_void().invokeExact();  // void  -> void
+     }
+
+     private static void prim2prim(int x) throws Throwable {
+         boolean z = (x != 0);
+         assertEquals(         z, (boolean) INDY_boolean_spread_boolean().invokeExact(z));  // spread: boolean -> boolean
+         assertEquals((byte) x, (byte) INDY_byte_spread_byte().invokeExact((byte) x));  // spread: byte -> byte
+         assertEquals((char) x, (char) INDY_char_spread_char().invokeExact((char) x));  // spread: char -> char
+         assertEquals((short) x, (short) INDY_short_spread_short().invokeExact((short) x));  // spread: short -> short
+         assertEquals((int) x, (int) INDY_int_spread_int().invokeExact((int) x));  // spread: int -> int
+         assertEquals((long) x, (long) INDY_long_spread_long().invokeExact((long) x));  // spread: long -> long
+         assertEquals((float) x, (float) INDY_float_spread_float().invokeExact((float) x));  // spread: float -> float
+         assertEquals((double) x, (double) INDY_double_spread_double().invokeExact((double) x));  // spread: double -> double
+     }
+
+     private static void assertEquals(Object o, Object o2) {
+         if (!o.equals(o2))
+             throw new AssertionError("expected: " + o + ", found: " + o2);
+     }
+
+
+    private static MethodHandle INDY_void_foo_void;
+    private static MethodHandle INDY_void_foo_void () throws Throwable {
+        if ( INDY_void_foo_void != null ) return INDY_void_foo_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(void .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_spread_void;
+    private static MethodHandle INDY_void_spread_void () throws Throwable {
+        if ( INDY_void_spread_void != null ) return INDY_void_spread_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(void .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_foo_boolean;
+    private static MethodHandle INDY_void_foo_boolean () throws Throwable {
+        if ( INDY_void_foo_boolean != null ) return INDY_void_foo_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(void .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_spread_boolean;
+    private static MethodHandle INDY_void_spread_boolean () throws Throwable {
+        if ( INDY_void_spread_boolean != null ) return INDY_void_spread_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(void .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_foo_byte;
+    private static MethodHandle INDY_void_foo_byte () throws Throwable {
+        if ( INDY_void_foo_byte != null ) return INDY_void_foo_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(void .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_spread_byte;
+    private static MethodHandle INDY_void_spread_byte () throws Throwable {
+        if ( INDY_void_spread_byte != null ) return INDY_void_spread_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(void .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_foo_char;
+    private static MethodHandle INDY_void_foo_char () throws Throwable {
+        if ( INDY_void_foo_char != null ) return INDY_void_foo_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(void .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_spread_char;
+    private static MethodHandle INDY_void_spread_char () throws Throwable {
+        if ( INDY_void_spread_char != null ) return INDY_void_spread_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(void .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_foo_short;
+    private static MethodHandle INDY_void_foo_short () throws Throwable {
+        if ( INDY_void_foo_short != null ) return INDY_void_foo_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(void .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_spread_short;
+    private static MethodHandle INDY_void_spread_short () throws Throwable {
+        if ( INDY_void_spread_short != null ) return INDY_void_spread_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(void .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_foo_int;
+    private static MethodHandle INDY_void_foo_int () throws Throwable {
+        if ( INDY_void_foo_int != null ) return INDY_void_foo_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(void .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_spread_int;
+    private static MethodHandle INDY_void_spread_int () throws Throwable {
+        if ( INDY_void_spread_int != null ) return INDY_void_spread_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(void .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_foo_long;
+    private static MethodHandle INDY_void_foo_long () throws Throwable {
+        if ( INDY_void_foo_long != null ) return INDY_void_foo_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(void .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_spread_long;
+    private static MethodHandle INDY_void_spread_long () throws Throwable {
+        if ( INDY_void_spread_long != null ) return INDY_void_spread_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(void .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_foo_float;
+    private static MethodHandle INDY_void_foo_float () throws Throwable {
+        if ( INDY_void_foo_float != null ) return INDY_void_foo_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(void .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_spread_float;
+    private static MethodHandle INDY_void_spread_float () throws Throwable {
+        if ( INDY_void_spread_float != null ) return INDY_void_spread_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(void .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_foo_double;
+    private static MethodHandle INDY_void_foo_double () throws Throwable {
+        if ( INDY_void_foo_double != null ) return INDY_void_foo_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(void .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_void_spread_double;
+    private static MethodHandle INDY_void_spread_double () throws Throwable {
+        if ( INDY_void_spread_double != null ) return INDY_void_spread_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(void .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_foo_void;
+    private static MethodHandle INDY_boolean_foo_void () throws Throwable {
+        if ( INDY_boolean_foo_void != null ) return INDY_boolean_foo_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(boolean .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_spread_void;
+    private static MethodHandle INDY_boolean_spread_void () throws Throwable {
+        if ( INDY_boolean_spread_void != null ) return INDY_boolean_spread_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(boolean .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_foo_boolean;
+    private static MethodHandle INDY_boolean_foo_boolean () throws Throwable {
+        if ( INDY_boolean_foo_boolean != null ) return INDY_boolean_foo_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(boolean .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_spread_boolean;
+    private static MethodHandle INDY_boolean_spread_boolean () throws Throwable {
+        if ( INDY_boolean_spread_boolean != null ) return INDY_boolean_spread_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(boolean .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_foo_byte;
+    private static MethodHandle INDY_boolean_foo_byte () throws Throwable {
+        if ( INDY_boolean_foo_byte != null ) return INDY_boolean_foo_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(boolean .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_spread_byte;
+    private static MethodHandle INDY_boolean_spread_byte () throws Throwable {
+        if ( INDY_boolean_spread_byte != null ) return INDY_boolean_spread_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(boolean .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_foo_char;
+    private static MethodHandle INDY_boolean_foo_char () throws Throwable {
+        if ( INDY_boolean_foo_char != null ) return INDY_boolean_foo_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(boolean .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_spread_char;
+    private static MethodHandle INDY_boolean_spread_char () throws Throwable {
+        if ( INDY_boolean_spread_char != null ) return INDY_boolean_spread_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(boolean .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_foo_short;
+    private static MethodHandle INDY_boolean_foo_short () throws Throwable {
+        if ( INDY_boolean_foo_short != null ) return INDY_boolean_foo_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(boolean .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_spread_short;
+    private static MethodHandle INDY_boolean_spread_short () throws Throwable {
+        if ( INDY_boolean_spread_short != null ) return INDY_boolean_spread_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(boolean .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_foo_int;
+    private static MethodHandle INDY_boolean_foo_int () throws Throwable {
+        if ( INDY_boolean_foo_int != null ) return INDY_boolean_foo_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(boolean .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_spread_int;
+    private static MethodHandle INDY_boolean_spread_int () throws Throwable {
+        if ( INDY_boolean_spread_int != null ) return INDY_boolean_spread_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(boolean .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_foo_long;
+    private static MethodHandle INDY_boolean_foo_long () throws Throwable {
+        if ( INDY_boolean_foo_long != null ) return INDY_boolean_foo_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(boolean .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_spread_long;
+    private static MethodHandle INDY_boolean_spread_long () throws Throwable {
+        if ( INDY_boolean_spread_long != null ) return INDY_boolean_spread_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(boolean .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_foo_float;
+    private static MethodHandle INDY_boolean_foo_float () throws Throwable {
+        if ( INDY_boolean_foo_float != null ) return INDY_boolean_foo_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(boolean .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_spread_float;
+    private static MethodHandle INDY_boolean_spread_float () throws Throwable {
+        if ( INDY_boolean_spread_float != null ) return INDY_boolean_spread_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(boolean .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_foo_double;
+    private static MethodHandle INDY_boolean_foo_double () throws Throwable {
+        if ( INDY_boolean_foo_double != null ) return INDY_boolean_foo_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(boolean .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_boolean_spread_double;
+    private static MethodHandle INDY_boolean_spread_double () throws Throwable {
+        if ( INDY_boolean_spread_double != null ) return INDY_boolean_spread_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(boolean .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_foo_void;
+    private static MethodHandle INDY_byte_foo_void () throws Throwable {
+        if ( INDY_byte_foo_void != null ) return INDY_byte_foo_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(byte .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_spread_void;
+    private static MethodHandle INDY_byte_spread_void () throws Throwable {
+        if ( INDY_byte_spread_void != null ) return INDY_byte_spread_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(byte .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_foo_boolean;
+    private static MethodHandle INDY_byte_foo_boolean () throws Throwable {
+        if ( INDY_byte_foo_boolean != null ) return INDY_byte_foo_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(byte .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_spread_boolean;
+    private static MethodHandle INDY_byte_spread_boolean () throws Throwable {
+        if ( INDY_byte_spread_boolean != null ) return INDY_byte_spread_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(byte .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_foo_byte;
+    private static MethodHandle INDY_byte_foo_byte () throws Throwable {
+        if ( INDY_byte_foo_byte != null ) return INDY_byte_foo_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(byte .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_spread_byte;
+    private static MethodHandle INDY_byte_spread_byte () throws Throwable {
+        if ( INDY_byte_spread_byte != null ) return INDY_byte_spread_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(byte .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_foo_char;
+    private static MethodHandle INDY_byte_foo_char () throws Throwable {
+        if ( INDY_byte_foo_char != null ) return INDY_byte_foo_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(byte .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_spread_char;
+    private static MethodHandle INDY_byte_spread_char () throws Throwable {
+        if ( INDY_byte_spread_char != null ) return INDY_byte_spread_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(byte .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_foo_short;
+    private static MethodHandle INDY_byte_foo_short () throws Throwable {
+        if ( INDY_byte_foo_short != null ) return INDY_byte_foo_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(byte .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_spread_short;
+    private static MethodHandle INDY_byte_spread_short () throws Throwable {
+        if ( INDY_byte_spread_short != null ) return INDY_byte_spread_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(byte .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_foo_int;
+    private static MethodHandle INDY_byte_foo_int () throws Throwable {
+        if ( INDY_byte_foo_int != null ) return INDY_byte_foo_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(byte .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_spread_int;
+    private static MethodHandle INDY_byte_spread_int () throws Throwable {
+        if ( INDY_byte_spread_int != null ) return INDY_byte_spread_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(byte .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_foo_long;
+    private static MethodHandle INDY_byte_foo_long () throws Throwable {
+        if ( INDY_byte_foo_long != null ) return INDY_byte_foo_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(byte .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_spread_long;
+    private static MethodHandle INDY_byte_spread_long () throws Throwable {
+        if ( INDY_byte_spread_long != null ) return INDY_byte_spread_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(byte .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_foo_float;
+    private static MethodHandle INDY_byte_foo_float () throws Throwable {
+        if ( INDY_byte_foo_float != null ) return INDY_byte_foo_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(byte .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_spread_float;
+    private static MethodHandle INDY_byte_spread_float () throws Throwable {
+        if ( INDY_byte_spread_float != null ) return INDY_byte_spread_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(byte .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_foo_double;
+    private static MethodHandle INDY_byte_foo_double () throws Throwable {
+        if ( INDY_byte_foo_double != null ) return INDY_byte_foo_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(byte .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_byte_spread_double;
+    private static MethodHandle INDY_byte_spread_double () throws Throwable {
+        if ( INDY_byte_spread_double != null ) return INDY_byte_spread_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(byte .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_foo_void;
+    private static MethodHandle INDY_char_foo_void () throws Throwable {
+        if ( INDY_char_foo_void != null ) return INDY_char_foo_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(char .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_spread_void;
+    private static MethodHandle INDY_char_spread_void () throws Throwable {
+        if ( INDY_char_spread_void != null ) return INDY_char_spread_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(char .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_foo_boolean;
+    private static MethodHandle INDY_char_foo_boolean () throws Throwable {
+        if ( INDY_char_foo_boolean != null ) return INDY_char_foo_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(char .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_spread_boolean;
+    private static MethodHandle INDY_char_spread_boolean () throws Throwable {
+        if ( INDY_char_spread_boolean != null ) return INDY_char_spread_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(char .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_foo_byte;
+    private static MethodHandle INDY_char_foo_byte () throws Throwable {
+        if ( INDY_char_foo_byte != null ) return INDY_char_foo_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(char .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_spread_byte;
+    private static MethodHandle INDY_char_spread_byte () throws Throwable {
+        if ( INDY_char_spread_byte != null ) return INDY_char_spread_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(char .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_foo_char;
+    private static MethodHandle INDY_char_foo_char () throws Throwable {
+        if ( INDY_char_foo_char != null ) return INDY_char_foo_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(char .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_spread_char;
+    private static MethodHandle INDY_char_spread_char () throws Throwable {
+        if ( INDY_char_spread_char != null ) return INDY_char_spread_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(char .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_foo_short;
+    private static MethodHandle INDY_char_foo_short () throws Throwable {
+        if ( INDY_char_foo_short != null ) return INDY_char_foo_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(char .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_spread_short;
+    private static MethodHandle INDY_char_spread_short () throws Throwable {
+        if ( INDY_char_spread_short != null ) return INDY_char_spread_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(char .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_foo_int;
+    private static MethodHandle INDY_char_foo_int () throws Throwable {
+        if ( INDY_char_foo_int != null ) return INDY_char_foo_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(char .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_spread_int;
+    private static MethodHandle INDY_char_spread_int () throws Throwable {
+        if ( INDY_char_spread_int != null ) return INDY_char_spread_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(char .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_foo_long;
+    private static MethodHandle INDY_char_foo_long () throws Throwable {
+        if ( INDY_char_foo_long != null ) return INDY_char_foo_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(char .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_spread_long;
+    private static MethodHandle INDY_char_spread_long () throws Throwable {
+        if ( INDY_char_spread_long != null ) return INDY_char_spread_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(char .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_foo_float;
+    private static MethodHandle INDY_char_foo_float () throws Throwable {
+        if ( INDY_char_foo_float != null ) return INDY_char_foo_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(char .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_spread_float;
+    private static MethodHandle INDY_char_spread_float () throws Throwable {
+        if ( INDY_char_spread_float != null ) return INDY_char_spread_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(char .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_foo_double;
+    private static MethodHandle INDY_char_foo_double () throws Throwable {
+        if ( INDY_char_foo_double != null ) return INDY_char_foo_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(char .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_char_spread_double;
+    private static MethodHandle INDY_char_spread_double () throws Throwable {
+        if ( INDY_char_spread_double != null ) return INDY_char_spread_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(char .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_foo_void;
+    private static MethodHandle INDY_short_foo_void () throws Throwable {
+        if ( INDY_short_foo_void != null ) return INDY_short_foo_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(short .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_spread_void;
+    private static MethodHandle INDY_short_spread_void () throws Throwable {
+        if ( INDY_short_spread_void != null ) return INDY_short_spread_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(short .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_foo_boolean;
+    private static MethodHandle INDY_short_foo_boolean () throws Throwable {
+        if ( INDY_short_foo_boolean != null ) return INDY_short_foo_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(short .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_spread_boolean;
+    private static MethodHandle INDY_short_spread_boolean () throws Throwable {
+        if ( INDY_short_spread_boolean != null ) return INDY_short_spread_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(short .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_foo_byte;
+    private static MethodHandle INDY_short_foo_byte () throws Throwable {
+        if ( INDY_short_foo_byte != null ) return INDY_short_foo_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(short .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_spread_byte;
+    private static MethodHandle INDY_short_spread_byte () throws Throwable {
+        if ( INDY_short_spread_byte != null ) return INDY_short_spread_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(short .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_foo_char;
+    private static MethodHandle INDY_short_foo_char () throws Throwable {
+        if ( INDY_short_foo_char != null ) return INDY_short_foo_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(short .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_spread_char;
+    private static MethodHandle INDY_short_spread_char () throws Throwable {
+        if ( INDY_short_spread_char != null ) return INDY_short_spread_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(short .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_foo_short;
+    private static MethodHandle INDY_short_foo_short () throws Throwable {
+        if ( INDY_short_foo_short != null ) return INDY_short_foo_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(short .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_spread_short;
+    private static MethodHandle INDY_short_spread_short () throws Throwable {
+        if ( INDY_short_spread_short != null ) return INDY_short_spread_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(short .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_foo_int;
+    private static MethodHandle INDY_short_foo_int () throws Throwable {
+        if ( INDY_short_foo_int != null ) return INDY_short_foo_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(short .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_spread_int;
+    private static MethodHandle INDY_short_spread_int () throws Throwable {
+        if ( INDY_short_spread_int != null ) return INDY_short_spread_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(short .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_foo_long;
+    private static MethodHandle INDY_short_foo_long () throws Throwable {
+        if ( INDY_short_foo_long != null ) return INDY_short_foo_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(short .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_spread_long;
+    private static MethodHandle INDY_short_spread_long () throws Throwable {
+        if ( INDY_short_spread_long != null ) return INDY_short_spread_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(short .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_foo_float;
+    private static MethodHandle INDY_short_foo_float () throws Throwable {
+        if ( INDY_short_foo_float != null ) return INDY_short_foo_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(short .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_spread_float;
+    private static MethodHandle INDY_short_spread_float () throws Throwable {
+        if ( INDY_short_spread_float != null ) return INDY_short_spread_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(short .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_foo_double;
+    private static MethodHandle INDY_short_foo_double () throws Throwable {
+        if ( INDY_short_foo_double != null ) return INDY_short_foo_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(short .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_short_spread_double;
+    private static MethodHandle INDY_short_spread_double () throws Throwable {
+        if ( INDY_short_spread_double != null ) return INDY_short_spread_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(short .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_foo_void;
+    private static MethodHandle INDY_int_foo_void () throws Throwable {
+        if ( INDY_int_foo_void != null ) return INDY_int_foo_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(int .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_spread_void;
+    private static MethodHandle INDY_int_spread_void () throws Throwable {
+        if ( INDY_int_spread_void != null ) return INDY_int_spread_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(int .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_foo_boolean;
+    private static MethodHandle INDY_int_foo_boolean () throws Throwable {
+        if ( INDY_int_foo_boolean != null ) return INDY_int_foo_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(int .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_spread_boolean;
+    private static MethodHandle INDY_int_spread_boolean () throws Throwable {
+        if ( INDY_int_spread_boolean != null ) return INDY_int_spread_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(int .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_foo_byte;
+    private static MethodHandle INDY_int_foo_byte () throws Throwable {
+        if ( INDY_int_foo_byte != null ) return INDY_int_foo_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(int .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_spread_byte;
+    private static MethodHandle INDY_int_spread_byte () throws Throwable {
+        if ( INDY_int_spread_byte != null ) return INDY_int_spread_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(int .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_foo_char;
+    private static MethodHandle INDY_int_foo_char () throws Throwable {
+        if ( INDY_int_foo_char != null ) return INDY_int_foo_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(int .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_spread_char;
+    private static MethodHandle INDY_int_spread_char () throws Throwable {
+        if ( INDY_int_spread_char != null ) return INDY_int_spread_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(int .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_foo_short;
+    private static MethodHandle INDY_int_foo_short () throws Throwable {
+        if ( INDY_int_foo_short != null ) return INDY_int_foo_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(int .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_spread_short;
+    private static MethodHandle INDY_int_spread_short () throws Throwable {
+        if ( INDY_int_spread_short != null ) return INDY_int_spread_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(int .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_foo_int;
+    private static MethodHandle INDY_int_foo_int () throws Throwable {
+        if ( INDY_int_foo_int != null ) return INDY_int_foo_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(int .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_spread_int;
+    private static MethodHandle INDY_int_spread_int () throws Throwable {
+        if ( INDY_int_spread_int != null ) return INDY_int_spread_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(int .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_foo_long;
+    private static MethodHandle INDY_int_foo_long () throws Throwable {
+        if ( INDY_int_foo_long != null ) return INDY_int_foo_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(int .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_spread_long;
+    private static MethodHandle INDY_int_spread_long () throws Throwable {
+        if ( INDY_int_spread_long != null ) return INDY_int_spread_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(int .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_foo_float;
+    private static MethodHandle INDY_int_foo_float () throws Throwable {
+        if ( INDY_int_foo_float != null ) return INDY_int_foo_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(int .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_spread_float;
+    private static MethodHandle INDY_int_spread_float () throws Throwable {
+        if ( INDY_int_spread_float != null ) return INDY_int_spread_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(int .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_foo_double;
+    private static MethodHandle INDY_int_foo_double () throws Throwable {
+        if ( INDY_int_foo_double != null ) return INDY_int_foo_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(int .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_int_spread_double;
+    private static MethodHandle INDY_int_spread_double () throws Throwable {
+        if ( INDY_int_spread_double != null ) return INDY_int_spread_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(int .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_foo_void;
+    private static MethodHandle INDY_long_foo_void () throws Throwable {
+        if ( INDY_long_foo_void != null ) return INDY_long_foo_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(long .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_spread_void;
+    private static MethodHandle INDY_long_spread_void () throws Throwable {
+        if ( INDY_long_spread_void != null ) return INDY_long_spread_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(long .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_foo_boolean;
+    private static MethodHandle INDY_long_foo_boolean () throws Throwable {
+        if ( INDY_long_foo_boolean != null ) return INDY_long_foo_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(long .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_spread_boolean;
+    private static MethodHandle INDY_long_spread_boolean () throws Throwable {
+        if ( INDY_long_spread_boolean != null ) return INDY_long_spread_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(long .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_foo_byte;
+    private static MethodHandle INDY_long_foo_byte () throws Throwable {
+        if ( INDY_long_foo_byte != null ) return INDY_long_foo_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(long .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_spread_byte;
+    private static MethodHandle INDY_long_spread_byte () throws Throwable {
+        if ( INDY_long_spread_byte != null ) return INDY_long_spread_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(long .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_foo_char;
+    private static MethodHandle INDY_long_foo_char () throws Throwable {
+        if ( INDY_long_foo_char != null ) return INDY_long_foo_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(long .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_spread_char;
+    private static MethodHandle INDY_long_spread_char () throws Throwable {
+        if ( INDY_long_spread_char != null ) return INDY_long_spread_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(long .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_foo_short;
+    private static MethodHandle INDY_long_foo_short () throws Throwable {
+        if ( INDY_long_foo_short != null ) return INDY_long_foo_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(long .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_spread_short;
+    private static MethodHandle INDY_long_spread_short () throws Throwable {
+        if ( INDY_long_spread_short != null ) return INDY_long_spread_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(long .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_foo_int;
+    private static MethodHandle INDY_long_foo_int () throws Throwable {
+        if ( INDY_long_foo_int != null ) return INDY_long_foo_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(long .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_spread_int;
+    private static MethodHandle INDY_long_spread_int () throws Throwable {
+        if ( INDY_long_spread_int != null ) return INDY_long_spread_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(long .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_foo_long;
+    private static MethodHandle INDY_long_foo_long () throws Throwable {
+        if ( INDY_long_foo_long != null ) return INDY_long_foo_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(long .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_spread_long;
+    private static MethodHandle INDY_long_spread_long () throws Throwable {
+        if ( INDY_long_spread_long != null ) return INDY_long_spread_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(long .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_foo_float;
+    private static MethodHandle INDY_long_foo_float () throws Throwable {
+        if ( INDY_long_foo_float != null ) return INDY_long_foo_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(long .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_spread_float;
+    private static MethodHandle INDY_long_spread_float () throws Throwable {
+        if ( INDY_long_spread_float != null ) return INDY_long_spread_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(long .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_foo_double;
+    private static MethodHandle INDY_long_foo_double () throws Throwable {
+        if ( INDY_long_foo_double != null ) return INDY_long_foo_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(long .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_long_spread_double;
+    private static MethodHandle INDY_long_spread_double () throws Throwable {
+        if ( INDY_long_spread_double != null ) return INDY_long_spread_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(long .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_foo_void;
+    private static MethodHandle INDY_float_foo_void () throws Throwable {
+        if ( INDY_float_foo_void != null ) return INDY_float_foo_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(float .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_spread_void;
+    private static MethodHandle INDY_float_spread_void () throws Throwable {
+        if ( INDY_float_spread_void != null ) return INDY_float_spread_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(float .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_foo_boolean;
+    private static MethodHandle INDY_float_foo_boolean () throws Throwable {
+        if ( INDY_float_foo_boolean != null ) return INDY_float_foo_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(float .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_spread_boolean;
+    private static MethodHandle INDY_float_spread_boolean () throws Throwable {
+        if ( INDY_float_spread_boolean != null ) return INDY_float_spread_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(float .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_foo_byte;
+    private static MethodHandle INDY_float_foo_byte () throws Throwable {
+        if ( INDY_float_foo_byte != null ) return INDY_float_foo_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(float .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_spread_byte;
+    private static MethodHandle INDY_float_spread_byte () throws Throwable {
+        if ( INDY_float_spread_byte != null ) return INDY_float_spread_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(float .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_foo_char;
+    private static MethodHandle INDY_float_foo_char () throws Throwable {
+        if ( INDY_float_foo_char != null ) return INDY_float_foo_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(float .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_spread_char;
+    private static MethodHandle INDY_float_spread_char () throws Throwable {
+        if ( INDY_float_spread_char != null ) return INDY_float_spread_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(float .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_foo_short;
+    private static MethodHandle INDY_float_foo_short () throws Throwable {
+        if ( INDY_float_foo_short != null ) return INDY_float_foo_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(float .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_spread_short;
+    private static MethodHandle INDY_float_spread_short () throws Throwable {
+        if ( INDY_float_spread_short != null ) return INDY_float_spread_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(float .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_foo_int;
+    private static MethodHandle INDY_float_foo_int () throws Throwable {
+        if ( INDY_float_foo_int != null ) return INDY_float_foo_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(float .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_spread_int;
+    private static MethodHandle INDY_float_spread_int () throws Throwable {
+        if ( INDY_float_spread_int != null ) return INDY_float_spread_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(float .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_foo_long;
+    private static MethodHandle INDY_float_foo_long () throws Throwable {
+        if ( INDY_float_foo_long != null ) return INDY_float_foo_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(float .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_spread_long;
+    private static MethodHandle INDY_float_spread_long () throws Throwable {
+        if ( INDY_float_spread_long != null ) return INDY_float_spread_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(float .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_foo_float;
+    private static MethodHandle INDY_float_foo_float () throws Throwable {
+        if ( INDY_float_foo_float != null ) return INDY_float_foo_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(float .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_spread_float;
+    private static MethodHandle INDY_float_spread_float () throws Throwable {
+        if ( INDY_float_spread_float != null ) return INDY_float_spread_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(float .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_foo_double;
+    private static MethodHandle INDY_float_foo_double () throws Throwable {
+        if ( INDY_float_foo_double != null ) return INDY_float_foo_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(float .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_float_spread_double;
+    private static MethodHandle INDY_float_spread_double () throws Throwable {
+        if ( INDY_float_spread_double != null ) return INDY_float_spread_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(float .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_foo_void;
+    private static MethodHandle INDY_double_foo_void () throws Throwable {
+        if ( INDY_double_foo_void != null ) return INDY_double_foo_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(double .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_spread_void;
+    private static MethodHandle INDY_double_spread_void () throws Throwable {
+        if ( INDY_double_spread_void != null ) return INDY_double_spread_void;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(double .class ))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_foo_boolean;
+    private static MethodHandle INDY_double_foo_boolean () throws Throwable {
+        if ( INDY_double_foo_boolean != null ) return INDY_double_foo_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(double .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_spread_boolean;
+    private static MethodHandle INDY_double_spread_boolean () throws Throwable {
+        if ( INDY_double_spread_boolean != null ) return INDY_double_spread_boolean;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(double .class , boolean.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_foo_byte;
+    private static MethodHandle INDY_double_foo_byte () throws Throwable {
+        if ( INDY_double_foo_byte != null ) return INDY_double_foo_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(double .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_spread_byte;
+    private static MethodHandle INDY_double_spread_byte () throws Throwable {
+        if ( INDY_double_spread_byte != null ) return INDY_double_spread_byte;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(double .class , byte.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_foo_char;
+    private static MethodHandle INDY_double_foo_char () throws Throwable {
+        if ( INDY_double_foo_char != null ) return INDY_double_foo_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(double .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_spread_char;
+    private static MethodHandle INDY_double_spread_char () throws Throwable {
+        if ( INDY_double_spread_char != null ) return INDY_double_spread_char;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(double .class , char.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_foo_short;
+    private static MethodHandle INDY_double_foo_short () throws Throwable {
+        if ( INDY_double_foo_short != null ) return INDY_double_foo_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(double .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_spread_short;
+    private static MethodHandle INDY_double_spread_short () throws Throwable {
+        if ( INDY_double_spread_short != null ) return INDY_double_spread_short;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(double .class , short.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_foo_int;
+    private static MethodHandle INDY_double_foo_int () throws Throwable {
+        if ( INDY_double_foo_int != null ) return INDY_double_foo_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(double .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_spread_int;
+    private static MethodHandle INDY_double_spread_int () throws Throwable {
+        if ( INDY_double_spread_int != null ) return INDY_double_spread_int;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(double .class , int.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_foo_long;
+    private static MethodHandle INDY_double_foo_long () throws Throwable {
+        if ( INDY_double_foo_long != null ) return INDY_double_foo_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(double .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_spread_long;
+    private static MethodHandle INDY_double_spread_long () throws Throwable {
+        if ( INDY_double_spread_long != null ) return INDY_double_spread_long;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(double .class , long.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_foo_float;
+    private static MethodHandle INDY_double_foo_float () throws Throwable {
+        if ( INDY_double_foo_float != null ) return INDY_double_foo_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(double .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_spread_float;
+    private static MethodHandle INDY_double_spread_float () throws Throwable {
+        if ( INDY_double_spread_float != null ) return INDY_double_spread_float;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(double .class , float.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_foo_double;
+    private static MethodHandle INDY_double_foo_double () throws Throwable {
+        if ( INDY_double_foo_double != null ) return INDY_double_foo_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "foo",
+                    MethodType.methodType(double .class , double.class))).dynamicInvoker();
+    }
+
+
+    private static MethodHandle INDY_double_spread_double;
+    private static MethodHandle INDY_double_spread_double () throws Throwable {
+        if ( INDY_double_spread_double != null ) return INDY_double_spread_double;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    "spread",
+                    MethodType.methodType(double .class , double.class))).dynamicInvoker();
+    }
+
+
+
+    private static MethodType MT_bootstrap () { return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); }
+
+    private static MethodHandle MH_bootstrap () throws Throwable {
+        return MethodHandles.lookup().findStatic(INDIFY_Test6998541.class, "bootstrap", MT_bootstrap());
+    }
+
+     private static CallSite bootstrap(MethodHandles.Lookup declaring, String name, MethodType methodType) throws Throwable {
+         MethodHandles.Lookup lookup = MethodHandles.lookup();
+         MethodHandle mh;
+         if (methodType.parameterCount() == 0) {
+             mh = lookup.findStatic(INDIFY_Test6998541.class, "identity", MethodType.methodType(void.class));
+         } else {
+             Class<?> type = methodType.parameterType(0);
+             mh = lookup.findStatic(INDIFY_Test6998541.class, "identity", MethodType.methodType(type, type));
+
+             if ("spread".equals(name)) {
+                 int paramCount = mh.type().parameterCount();
+                 mh = mh.asSpreader(Object[].class, paramCount).asCollector(Object[].class, paramCount);
+             }
+         }
+         mh = mh.asType(methodType);
+         return new ConstantCallSite(mh);
+     }
+
+     private static boolean identity(boolean v) { return v; }
+     private static byte identity(byte v) { return v; }
+     private static char identity(char v) { return v; }
+     private static short identity(short v) { return v; }
+     private static int identity(int v) { return v; }
+     private static long identity(long v) { return v; }
+     private static float identity(float v) { return v; }
+     private static double identity(double v) { return v; }
+     private static void identity() {}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/INDIFY_Test6998541.jmpp	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,229 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.java.rawRetypes;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+ public class INDIFY_Test6998541 {
+     private static final int N = 100000;
+
+#
+# String[] types = new String[] { "void", "boolean", "byte", "char", "short", "int", "long", "float", "double" };
+#
+# String[][] primTypes = new String[][] {
+# new String[] { "boolean", "Boolean", "false" },
+# new String[] { "byte", "Byte", "0" },
+# new String[] { "char", "Character", "0" },
+# new String[] { "short", "Short", "0" },
+# new String[] { "int", "Integer", "0" },
+# new String[] { "long", "Long", "0L" },
+# new String[] { "float", "Float", "0f" },
+# new String[] { "double", "Double", "0d" }
+# };
+#
+
+     public static void main(String[] args) throws Throwable {
+#
+# for ( String[] t : primTypes ) {
+#
+         @("do" + t[0]) ();
+#
+# }
+#
+     }
+
+#
+# for ( String[] t : primTypes ) {
+#
+     private static void @("do" + t[0]) () throws Throwable {
+         System.out.println(@("\"do" + t[0] + "\""));
+
+#     if ( t[0].equals("boolean") ) {
+#
+         for (int i = 0; i < N; i++ ) {
+             @(t[0])2prim(false);
+             @(t[0])2prim(true);
+#
+#     } else {
+#
+         @(t[0]) x = @(t[1]).MIN_VALUE;
+         @(t[0]) D = @(t[1]).MAX_VALUE / (N / 2);
+         for (int i = 0; i < N; i++, x += D) {
+#
+             @(t[0])2prim(x);
+
+#         if ( t[0].equals("int") ) {
+             void2prim(x);
+             prim2void(x);
+             prim2prim(x);
+#         }
+#     }
+
+#
+         }
+     }
+# }
+#
+
+     private static void void2prim(int i) throws Throwable {
+#
+# for ( String[] t : primTypes ) {
+#
+         assertEquals(        @(t[2]), (@(t[0])) INDY_@(t[0])_foo_void().invokeExact());  // void -> @(t[0])
+#
+# }
+#
+     }
+
+#
+# for ( String[] f : primTypes ) {
+#
+     private static void @(f[0])2prim(@(f[0]) x) throws Throwable {
+#        if ( f[0].equals("boolean") ) {
+         int i = x ? 1 : 0;
+#        } else {
+         @(f[0]) i = x;
+#        }
+#
+#     for ( String[] t : primTypes ) {
+#        if ( t[0].equals("boolean") ) {
+#        if ( f[0].equals("boolean") ) {
+             boolean z = x;
+#        } else {
+             boolean z = (x != 0);
+#        }
+         assertEquals(z, (@(t[0])) INDY_@(t[0])_foo_@(f[0])().invokeExact(x));  // @(f[0]) -> @(t[0])
+#          } else {
+         assertEquals((@(t[0])) i, (@(t[0])) INDY_@(t[0])_foo_@(f[0])().invokeExact(x));  // @(f[0]) -> @(t[0])
+#          }
+#     }
+#
+     }
+#
+# }
+#
+
+     private static void prim2void(int x) throws Throwable {
+#
+# for ( String[] f : primTypes ) {
+#        if ( f[0].equals("boolean") ) {
+             boolean z = (x != 0);
+              INDY_void_foo_@(f[0])().invokeExact(z);  // @(f[0]) -> void
+#        } else {
+              INDY_void_foo_@(f[0])().invokeExact((@(f[0])) x);  // @(f[0]) -> void
+#        }
+# }
+#
+     }
+
+     private static void void2void() throws Throwable {
+         INDY_void_foo_void().invokeExact();  // void  -> void
+     }
+
+     private static void prim2prim(int x) throws Throwable {
+#
+# for ( String[] f : primTypes ) {
+#        if ( f[0].equals("boolean") ) {
+         boolean z = (x != 0);
+         assertEquals(         z, (@(f[0])) INDY_@(f[0])_spread_@(f[0])().invokeExact(z));  // spread: @(f[0]) -> @(f[0])
+#        } else {
+         assertEquals((@(f[0])) x, (@(f[0])) INDY_@(f[0])_spread_@(f[0])().invokeExact((@(f[0])) x));  // spread: @(f[0]) -> @(f[0])
+#        }
+# }
+     }
+
+     private static void assertEquals(Object o, Object o2) {
+         if (!o.equals(o2))
+             throw new AssertionError("expected: " + o + ", found: " + o2);
+     }
+
+#
+# String[] names = new String[] { "foo", "spread" };
+#
+# for ( String ret : types ) {
+#     for ( String arg : types ) {
+#
+#          String argParam, argTypeParam, methodTypeArg;
+#          if ( ! arg.equals("void") ) {
+#              argParam = "x";
+#              argTypeParam = arg + " x";
+#              methodTypeArg = ", " + arg + ".class";
+#          } else {
+#              argTypeParam = argParam = methodTypeArg = "";
+#          }
+#
+#          for ( String name : names ) {
+#             String methodName = "INDY_" + ret + "_" + name + "_"  + arg;
+#             String wrapperName = "indyWrapper_" + ret + "_" + name;
+
+    private static MethodHandle @methodName;
+    private static MethodHandle @methodName () throws Throwable {
+        if ( @methodName != null ) return @methodName;
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                    MethodHandles.lookup(),
+                    @("\"" + name + "\""),
+                    MethodType.methodType(@ret .class @methodTypeArg))).dynamicInvoker();
+    }
+
+#
+#           }
+#       }
+# }
+#
+
+
+    private static MethodType MT_bootstrap () { return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class); }
+
+    private static MethodHandle MH_bootstrap () throws Throwable {
+        return MethodHandles.lookup().findStatic(INDIFY_Test6998541.class, "bootstrap", MT_bootstrap());
+    }
+
+     private static CallSite bootstrap(MethodHandles.Lookup declaring, String name, MethodType methodType) throws Throwable {
+         MethodHandles.Lookup lookup = MethodHandles.lookup();
+         MethodHandle mh;
+         if (methodType.parameterCount() == 0) {
+             mh = lookup.findStatic(INDIFY_Test6998541.class, "identity", MethodType.methodType(void.class));
+         } else {
+             Class<?> type = methodType.parameterType(0);
+             mh = lookup.findStatic(INDIFY_Test6998541.class, "identity", MethodType.methodType(type, type));
+
+             if ("spread".equals(name)) {
+                 int paramCount = mh.type().parameterCount();
+                 mh = mh.asSpreader(Object[].class, paramCount).asCollector(Object[].class, paramCount);
+             }
+         }
+         mh = mh.asType(methodType);
+         return new ConstantCallSite(mh);
+     }
+
+# for ( String t : types ) {
+#    if ( t.equals("void") ) continue;
+     private static @t identity(@t v) { return v; }
+# }
+     private static void identity() {}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/rawRetypes/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @bug 6998541
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/java/rawRetypes.
+ * VM Testbase keywords: [feature_mlvm, duplicate-of-jtreg-test, exclude]
+ * VM Testbase comments: 8199227
+ * VM Testbase readme:
+ * DESCRIPTION
+ *      This is test for raw retypes (conversions between primitive types)
+ *      TODO: This test is clearly JCK one, so it has to be modified to be a stress test.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ * @ignore 8199227
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.java.rawRetypes.INDIFY_Test6998541
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.indy.func.java.rawRetypes.INDIFY_Test6998541
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/thisAsArgument/INDIFY_Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/java/thisAsArgument.
+ * VM Testbase keywords: [feature_mlvm]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     The test is written for a CR 6927831:
+ *     InvokeDynamic throws NoClassDefFoundError in the following test:
+ *     package test;
+ *     import java.dyn.InvokeDynamic;
+ *     import java.dyn.InvokeDynamicBootstrapError;
+ *     public class Self {
+ *       public static void main(String[] args) {
+ *             try {
+ *                 InvokeDynamic.<void>greet(new Self());
+ *             } catch ( InvokeDynamicBootstrapError e ) {
+ *                 System.out.println("TEST PASSED");
+ *             } catch ( Throwable t ) {
+ *                 System.err.println("Oops!");
+ *                 t.printStackTrace();
+ *             }
+ *         }
+ *     }
+ *     ...when it is launched with -classpath:
+ *     $ java -classpath bin test.Self
+ *     Oops!
+ *     java.lang.NoClassDefFoundError: test/Self
+ *         at test.Self.main(Self.java:10)
+ *     If we replace -classpath with -Xbootclasspath:
+ *     $ java -Xbootclasspath/a:bin test.Self
+ *     TEST PASSED
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.java.thisAsArgument.INDIFY_Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.indy.func.java.thisAsArgument.INDIFY_Test
+ */
+
+package vm.mlvm.indy.func.java.thisAsArgument;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.Arrays;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Test extends MlvmTest {
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+
+    // Indify-specific bootstrap trampoline
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(Object.class, Object.class, Object.class, Object.class);
+    }
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Test.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static Object bootstrap(Object lookup, Object name, Object type) throws Throwable {
+        getLog().trace(0, "bootstrap(" +
+                Arrays.asList(lookup.getClass(), lookup,
+                        name.getClass(), name,
+                        type.getClass(), type) + ") called");
+
+        return new Object();
+    }
+
+    public static void target(INDIFY_Test arg) {
+        getLog().trace(0, "target called: arg=" + arg);
+        new Throwable("Stack trace").printStackTrace(getLog().getOutStream());
+    }
+
+    // Indify-specific invokedynamic call substitution
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "target",
+                MethodType.methodType(void.class, INDIFY_Test.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+        try {
+            // Substitution for:
+            // InvokeDynamic.target(new INDIFY_Test());
+            INDIFY_Test test = new INDIFY_Test();
+            INDY_call().invokeExact(test);
+            getLog().complain("Target method should not be called");
+            return false;
+        } catch ( BootstrapMethodError e ) {
+            getLog().trace(0, "Caught exception as expected:");
+            e.printStackTrace(getLog().getOutStream());
+            return true;
+        } catch ( Throwable t ) {
+            getLog().complain("Wrong exception caught!");
+            t.printStackTrace(getLog().getOutStream());
+            return false;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/thisAsArgument/Test.java.jdk8	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.java.thisAsArgument;
+
+import vm.mlvm.share.MlvmTest;
+
+public class Test extends MlvmTest {
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+
+    @Override
+    public boolean run() throws Throwable {
+        try {
+            InvokeDynamic.greet(new Test());
+            return false;
+        } catch ( InvokeDynamicBootstrapError e ) {
+            return true;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/verifyStackTrace/INDIFY_Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/java/verifyStackTrace.
+ * VM Testbase keywords: [feature_mlvm]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     The test verifies that a stack trace is readable and contains a correct stack in a bootstrap and a target methods
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.java.verifyStackTrace.INDIFY_Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.indy.func.java.verifyStackTrace.INDIFY_Test
+ */
+
+package vm.mlvm.indy.func.java.verifyStackTrace;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandles.Lookup;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Test extends MlvmTest {
+
+    private static final String METHOD_NAME = "runFunky";
+    private static final int MAX_FRAME = 10;
+
+    public INDIFY_Test() {}
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Test.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(Lookup c, String name, MethodType mt) throws Throwable {
+        getLog().trace(0, "Lookup " + c + "; method name = " + name + "; method type = " + mt);
+
+        boolean found = false;
+        StackTraceElement trace[] = new Throwable().getStackTrace();
+        for ( int i = 1; i < MAX_FRAME; i++ ) {
+            StackTraceElement stackFrame = trace[i];
+            getLog().trace(0, "Caller " + i + " stack frame: " + stackFrame);
+            if ( stackFrame.getMethodName().equals(METHOD_NAME) ) {
+                getLog().trace(0, "Required stack frame found");
+                found = true;
+                break;
+            }
+        }
+
+        if ( ! found )
+            throw new RuntimeException("Can't find caller method name (" + METHOD_NAME + ") in a bootstrap method stack");
+
+        return new ConstantCallSite(MethodHandles.lookup().findStatic(INDIFY_Test.class, "target", mt));
+    }
+
+    public static Throwable target(Object o, String s, int i) {
+        getLog().trace(0, "Target called! Object = " + o + "; string = " + s + "; int = " + i);
+        return new Throwable();
+    }
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Throwable.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public boolean runFunky() throws Throwable {
+        // Throwable t = (Throwable) InvokeDynamic.greet(new Object(), "world", 123);
+        Object o = new Object();
+        String s = "world";
+        int i = 123;
+        Throwable t = (Throwable) INDY_call().invokeExact(o, s, i);
+
+        StackTraceElement stackFrame = t.getStackTrace()[1];
+        getLog().trace(0, "Stack trace element from target call: " + stackFrame);
+        if ( ! stackFrame.getMethodName().equals(METHOD_NAME) )
+            throw new Exception("Wrong method name in a bootstrap method: " + stackFrame);
+
+        return true;
+    }
+
+    public boolean run() throws Throwable { return runFunky(); }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/java/verifyStackTrace/Test.java.jdk8	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.java.verifyStackTrace;
+
+import java.dyn.CallSite;
+import java.dyn.InvokeDynamic;
+import java.dyn.Linkage;
+import java.dyn.MethodHandles;
+import java.dyn.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class Test extends MlvmTest {
+
+    private static final String METHOD_NAME = "runFunky";
+    private static final int MAX_FRAME = 10;
+
+    public Test() {}
+
+    public static CallSite bootstrap(Class<?> c, String name, MethodType mt) {
+        getLog().trace(0, "Class " + c + "; method name = " + name + "; method type = " + mt);
+
+        boolean found = false;
+        StackTraceElement trace[] = new Throwable().getStackTrace();
+        for ( int i = 1; i < MAX_FRAME; i++ ) {
+            StackTraceElement stackFrame = trace[3];
+            getLog().trace(0, "Caller " + i + " stack frame: " + stackFrame);
+            if ( stackFrame.getMethodName().equals(METHOD_NAME) ) {
+                found = true;
+                break;
+            }
+        }
+
+        if ( ! found )
+            throw new RuntimeException("Can't find caller method name (" + METHOD_NAME + ") in a bootstrap method stack");
+
+        return new CallSite(MethodHandles.publicLookup().findStatic(Test.class, "target", mt));
+    }
+
+    public static Throwable target(Object o, String s, int i) {
+        getLog().trace(0, "Target called! Object = " + o + "; string = " + s + "; int = " + i);
+        return new Throwable();
+    }
+
+    public boolean runFunky() throws Throwable {
+        Throwable t = (Throwable) InvokeDynamic.greet(new Object(), "world", 123);
+
+        StackTraceElement stackFrame = t.getStackTrace()[1];
+        if ( ! stackFrame.getMethodName().equals(METHOD_NAME) )
+            throw new RuntimeException("Wrong method name in a bootstrap method: " + stackFrame);
+
+        return true;
+    }
+
+    public boolean run() throws Throwable { return runFunky(); }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpoint/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jdi/breakpoint.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine]
+ * VM Testbase comments: 8199578
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Using JDI set a debugger breakpoint on invokedynamic instruction.
+ *     Go few steps, obtaining various information from JVM.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build debuggee class
+ * @build vm.mlvm.share.jdi.IndyDebuggee
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jdi.breakpoint.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm PropertyResolvingWrapper
+ *      vm.mlvm.indy.func.jdi.breakpoint.Test
+ *      -verbose
+ *      -arch=${os.family}-${os.simpleArch}
+ *      -waittime=5
+ *      -debugee.vmkind=java
+ *      -transport.address=dynamic
+ *      -debugger.debuggeeClass vm.mlvm.share.jdi.IndyDebuggee
+ */
+
+package vm.mlvm.indy.func.jdi.breakpoint;
+
+import vm.mlvm.share.jdi.ArgumentHandler;
+import vm.mlvm.share.jdi.BreakpointInfo;
+import vm.mlvm.share.jdi.JDIBreakpointTest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Test extends JDIBreakpointTest {
+    // indyWrapper:S8000,bootstrap,target,stop
+    @Override
+    protected List<BreakpointInfo> getBreakpoints(String debuggeeClassName) {
+        List<BreakpointInfo> result = new ArrayList<>();
+        {
+            BreakpointInfo info = new BreakpointInfo("indyWrapper");
+            info.stepsToTrace = 8000;
+            result.add(info);
+        }
+        result.add(new BreakpointInfo("bootstrap"));
+        result.add(new BreakpointInfo("target"));
+        result.add(new BreakpointInfo("stop"));
+        return result;
+    }
+
+
+    public static void main(String[] args) {
+        launch(new ArgumentHandler(args));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jdi/breakpointOtherStratum/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jdi/breakpointOtherStratum.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine]
+ * VM Testbase comments: 8199578
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Performs debugging of invokedynamic call in vm.mlvm.share.jdi.INDIFY_Debuggee (with added
+ *     source debug information) and verifies that JDI reports correct SDE locations.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build debuggee class
+ * @build vm.mlvm.share.jdi.IndyDebuggee
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jdi.breakpointOtherStratum.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @comment recompile INDIFY_SDE_DebuggeeBase with Stratum annotation processor
+ * @clean vm.mlvm.share.jpda.INDIFY_SDE_DebuggeeBase
+ * @run driver
+ *      vm.mlvm.share.StratumClassesBuilder
+ *      vmTestbase/vm/mlvm/share/jpda/INDIFY_SDE_DebuggeeBase.java
+ *
+ * @run main/othervm PropertyResolvingWrapper
+ *      vm.mlvm.indy.func.jdi.breakpointOtherStratum.Test
+ *      -verbose
+ *      -arch=${os.family}-${os.simpleArch}
+ *      -waittime=5
+ *      -debugee.vmkind=java
+ *      -debugee.vmkeys="-cp ./bin/classes${path.separator}${test.class.path}"
+ *      -transport.address=dynamic
+ *      -debugger.debuggeeClass vm.mlvm.share.jdi.IndyDebuggee
+ */
+
+package vm.mlvm.indy.func.jdi.breakpointOtherStratum;
+
+import vm.mlvm.share.jdi.ArgumentHandler;
+import vm.mlvm.share.jdi.BreakpointInfo;
+import vm.mlvm.share.jdi.JDIBreakpointTest;
+import vm.mlvm.share.jpda.StratumInfo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Test extends JDIBreakpointTest {
+
+    @Override
+    protected List<BreakpointInfo> getBreakpoints(String debuggeeClassName) {
+        List<BreakpointInfo> result = new ArrayList<>();
+        // indyWrapper:S8000/Logo=INDIFY_SDE_DebuggeeBase.logo:2
+        {
+            BreakpointInfo info = new BreakpointInfo("indyWrapper");
+            info.stepsToTrace = 8000;
+            info.stratumInfo = new StratumInfo("Logo", "INDIFY_SDE_DebuggeeBase.logo", 2);
+            result.add(info);
+        }
+        // bootstrap/Logo=INDIFY_SDE_DebuggeeBase.logo:3
+        {
+            BreakpointInfo info = new BreakpointInfo("bootstrap");
+            info.stratumInfo = new StratumInfo("Logo", "INDIFY_SDE_DebuggeeBase.logo", 3);
+            result.add(info);
+        }
+        // target/Logo=INDIFY_SDE_DebuggeeBase.logo:4
+        {
+            BreakpointInfo info = new BreakpointInfo("target");
+            info.stratumInfo = new StratumInfo("Logo", "INDIFY_SDE_DebuggeeBase.logo", 4);
+            result.add(info);
+        }
+        // stop/Logo=INDIFY_SDE_DebuggeeBase.logo:5
+        {
+            BreakpointInfo info = new BreakpointInfo("stop");
+            info.stratumInfo = new StratumInfo("Logo", "INDIFY_SDE_DebuggeeBase.logo", 5);
+            result.add(info);
+        }
+        return result;
+    }
+
+    public static void main(String[] args) {
+        launch(new ArgumentHandler(args));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_a;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Original target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return false;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Original";
+        int i = 456;
+        boolean b = (Boolean) INDY_call().invokeExact(o, s, i);
+        redefineNow();
+        throw new RuntimeException("Original invokeTarget() method is executed after redefinition. Test failed.");
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). After calling the target method, Dummy0 class is redefined
+ *     using RedefineClasses function to another Dummy0 class and PopFrame function
+ *     is called to reenter the method.
+ *     To verify logic of merging constant pools with regard to JSR 292, the original class has just
+ *     one invokedynamic call and the new Dummy0 has several invokedynamic calls with different arguments.
+ *     The test verifies that when class is redefined and frame is popped,
+ *     the new target method is executed and the site is relinked.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_a.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_a.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_a/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_a;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException   {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Redefined";
+        int i = 456;
+        boolean b = (Boolean) INDY_call().invokeExact(o, s, i);
+        b ^= (Boolean) INDY_call().invokeExact(o, s, i);
+        o = new Object();
+        s = s + s;
+        i = i + i;
+        b ^= (Boolean) INDY_call().invokeExact(o, s, i);
+        b ^= (Boolean) INDY_call().invokeExact(o, s, i);
+        b ^= (Boolean) INDY_call().invokeExact(o, s, i);
+        return b;
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_b;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        redefineNow();
+        throw new RuntimeException("Bootstrap method has not been redefined. Test failed.");
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        throw new RuntimeException("Original target method was called. Test failed.");
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Original";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, quarantine, noJFR]
+ * VM Testbase comments: 8013267
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses
+ *     function to another Dummy0 class and PopFrame function is called to reenter the method.
+ *     To verify logic of merging constant pools with regard to JSR 292, the original class has just
+ *     one invokedynamic call and the new Dummy0 has several invokedynamic calls with different arguments.
+ *     The test verifies that when class is redefined in a target method (at that moment,
+ *     the call site is linked) and frame is popped, the new target method is executed and
+ *     the site is relinked.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_b.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_b.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manyDiff_b/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2manyDiff_b;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException   {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        //in the original file: redefineNow();
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Redefined";
+        int i = 456;
+        boolean b = (Boolean) INDY_call().invokeExact(o, s, i);
+        b ^= (Boolean) INDY_call().invokeExact(o, s, i);
+        o = new Object();
+        s = s + s;
+        i = i + i;
+        b ^= (Boolean) INDY_call().invokeExact(o, s, i);
+        b ^= (Boolean) INDY_call().invokeExact(o, s, i);
+        b ^= (Boolean) INDY_call().invokeExact(o, s, i);
+        return b;
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_a;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Original target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return false;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Original";
+        int i = 456;
+        boolean b = (Boolean) INDY_call().invokeExact(o, s, i);
+        redefineNow();
+        throw new RuntimeException("Original invokeTarget() method is executed after redefinition. Test failed.");
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). After calling the target method, Dummy0 class is redefined
+ *     using RedefineClasses function to another Dummy0 class and PopFrame function
+ *     is called to reenter the method.
+ *     To verify logic of merging constant pools with regard to JSR 292, the original class has just
+ *     one invokedynamic call and the new Dummy0 has several identical invokedynamic calls.
+ *     The test verifies that when class is redefined and frame is popped,
+ *     the new target method is executed and the site is relinked.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_a.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_a.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_a/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_a;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException   {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Redefined";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i)
+            && (Boolean) INDY_call().invokeExact(o, s, i)
+            && (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_b;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        redefineNow();
+        throw new RuntimeException("Bootstrap method has not been redefined. Test failed.");
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        throw new RuntimeException("Original target method was called. Test failed.");
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Original";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, quarantine, noJFR]
+ * VM Testbase comments: 8013267
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses
+ *     function to another Dummy0 class and PopFrame function is called to reenter the method.
+ *     To verify logic of merging constant pools with regard to JSR 292, the original class has just
+ *     one invokedynamic call and the new Dummy0 has several identical invokedynamic calls.
+ *     The test verifies that when class is redefined in a target method (at that moment,
+ *     the call site is linked) and frame is popped, the new target method is executed and
+ *     the site is relinked.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_b.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_b.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2manySame_b/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2manySame_b;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException   {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        //in the original file: redefineNow();
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Redefined";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i)
+            && (Boolean) INDY_call().invokeExact(o, s, i)
+            && (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2none_a;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        redefineNow();
+        throw new RuntimeException("Bootstrap method has not been redefined. Test failed.");
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        throw new RuntimeException("Original target method was called. Test failed.");
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Original";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, quarantine, noJFR]
+ * VM Testbase comments: 8013267
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). After calling the target method, Dummy0 class is redefined
+ *     using RedefineClasses function to another Dummy0 class and PopFrame function
+ *     is called to reenter the method.
+ *     To verify logic of merging constant pools with regard to JSR 292, the original class has
+ *     a invokedynamic call and the new Dummy0 does not have invokedynamic at all.
+ *     The test verifies that when class is redefined and frame is popped,
+ *     the new target method is executed and the site is relinked.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2none_a.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2none_a.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_a/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2none_a;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        //In the original class: redefineNow();
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Redefined";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2none_b;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        redefineNow();
+        throw new RuntimeException("Original target method was called. Test failed.");
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Original";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses
+ *     function to another Dummy0 class and PopFrame function is called to reenter the method.
+ *     To verify logic of merging constant pools with regard to JSR 292, the original class has
+ *     a invokedynamic call and the new Dummy0 does not have invokedynamic at all.
+ *     The test verifies that when class is redefined in a target method (at that moment,
+ *     the call site is linked) and frame is popped, the new target method is executed and
+ *     the site is relinked.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2none_b.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2none_b.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2none_b/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2none_b;
+
+import vm.mlvm.share.MlvmTest;
+
+import java.lang.invoke.*;
+
+public class INDIFY_Dummy0 {
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Redefined";
+        int i = 456;
+        return (Boolean) target(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2same_a;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return false;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "";
+        int i = 456;
+        boolean b = (Boolean) INDY_call().invokeExact(o, s, i);
+        redefineNow();
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). After calling the target method, Dummy0 class is redefined
+ *     using RedefineClasses function to another Dummy0 class and PopFrame function
+ *     is called to reenter the method.
+ *     To verify logic of merging constant pools with regard to JSR 292, the original class
+ *     and the target one have the nearly the same code and the same CP.
+ *     The test verifies that when class is redefined and frame is popped,
+ *     the new target method is executed and the site is relinked.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2same_a.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2same_a.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_a/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2same_a;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "";
+        int i = 456;
+        boolean b = (Boolean) INDY_call().invokeExact(o, s, i);
+        // In the original class here goes: redefineNow();
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2same_b;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        redefineNow();
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return false;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses
+ *     function to another Dummy0 class and PopFrame function is called to reenter the method.
+ *     To verify logic of merging constant pools with regard to JSR 292, the original class
+ *     and the target one have the nearly the same code and the same CP.
+ *     The test verifies that when class is redefined in a target method (at that moment,
+ *     the call site is linked) and frame is popped, the new target method is executed and
+ *     the site is relinked.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.mergeCP_indy2same_b.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_indy2same_b.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_indy2same_b/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_indy2same_b;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_none2indy_a;
+
+import vm.mlvm.share.MlvmTest;
+
+import java.lang.invoke.*;
+
+
+public class INDIFY_Dummy0 {
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Original target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return false;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Original";
+        int i = 456;
+        boolean b = target(o, s, i);
+        redefineNow();
+        throw new RuntimeException("Original invokeTarget() method is executed after redefinition. Test failed.");
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException   {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). After calling the target method, Dummy0 class is redefined
+ *     using RedefineClasses function to another Dummy0 class and PopFrame function
+ *     is called to reenter the method.
+ *     To verify logic of merging constant pools with regard to JSR 292, the original class
+ *     does not have a invokedynamic call at all and the new Dummy0 does have one.
+ *     The test verifies that when class is redefined and frame is popped,
+ *     the new target method is executed and the site is relinked.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.mergeCP_none2indy_a.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_none2indy_a.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_a/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_none2indy_a;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException   {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Redefined";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_none2indy_b;
+
+import vm.mlvm.share.MlvmTest;
+
+import java.lang.invoke.*;
+
+public class INDIFY_Dummy0 {
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException   {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        redefineNow();
+        throw new RuntimeException("Original target method was called instead of the redefined one. Test failed.");
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class,
+                        int.class));
+
+        return cs.dynamicInvoker();
+    }
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Original";
+        int i = 456;
+        return target(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jvmti, redefine, noJFR]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses
+ *     function to another Dummy0 class and PopFrame function is called to reenter the method.
+ *     To verify logic of merging constant pools with regard to JSR 292, the original class
+ *     does not have a invokedynamic call at all and the new Dummy0 does have one.
+ *     The test verifies that when class is redefined in a target method (at that moment,
+ *     the call site is linked) and frame is popped, the new target method is executed and
+ *     the site is relinked.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.mergeCP_none2indy_b.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.mergeCP_none2indy_b.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/mergeCP_none2indy_b/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.mergeCP_none2indy_b;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException   {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        Object o = new Object();
+        String s = "Redefined";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.redefineClassInBootstrap;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException  {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        redefineNow();
+        throw new RuntimeException("Bootstrap method has not been redefined. Test failed.");
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Original target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return false;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        //return (boolean) InvokeDynamic.greet(new Object(), "Redefined", 456);
+        Object o = new Object();
+        String s = "Original";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/redefineClassInBootstrap.
+ * VM Testbase keywords: [feature_mlvm, jvmti, redefine, quarantine, noJFR]
+ * VM Testbase comments: 8013267
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses
+ *     function to Dummy1 class (in its classfile every occurence of "Dummy1" is replaced with
+ *     "Dummy0") and PopFrame function is called to reenter the method.
+ *     The test verifies that:
+ *     - When class is redefined in bootstrap method frame, a new bootstrap method is called after PopFrame()
+ *     CR 6929027
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.redefineClassInBootstrap.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.redefineClassInBootstrap.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInBootstrap/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.redefineClassInBootstrap;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws Throwable {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        //return (boolean) InvokeDynamic.greet(new Object(), "Redefined", 456);
+        Object o = new Object();
+        String s = "Redefined";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.redefineClassInTarget;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Original bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Original target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        redefineNow();
+        return false;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        //return (boolean) InvokeDynamic.greet(new Object(), "Redefined", 456);
+        Object o = new Object();
+        String s = "Original";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/redefineClassInTarget.
+ * VM Testbase keywords: [feature_mlvm, jvmti, redefine, jdk, noJFR]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, monitoring that
+ *     a method in the debuggee class (Dummy0.redefineNow()) is called (monitoring is done
+ *     via MethodEntry event). At this moment, Dummy0 class is redefined using RedefineClasses
+ *     function to Dummy1 class (in its classfile every occurence of "Dummy1" is replaced with
+ *     "Dummy0") and PopFrame function is called to reenter the method.
+ *     The test verifies that when class is redefined in a target method (at that moment,
+ *     the call site is linked) and frame is popped, the new target method is executed and
+ *     the site is relinked.
+ *     CR 6929027
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build dummy class
+ * @build vm.mlvm.indy.func.jvmti.redefineClassInTarget.INDIFY_Dummy0
+ *
+ * @comment compile newclass to bin/newclass
+ * @run driver nsk.share.ExtraClassesBuilder newclass
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder bin/newclass
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:IndyRedefineClass=verbose=~pathToNewByteCode=./bin/newclass
+ *      vm.mlvm.indy.func.jvmti.share.IndyRedefineTest
+ *      -dummyClassName=vm.mlvm.indy.func.jvmti.redefineClassInTarget.INDIFY_Dummy0
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/redefineClassInTarget/newclass/INDIFY_Dummy0.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.redefineClassInTarget;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Dummy0 {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws Throwable {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Dummy0.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(MethodHandles.Lookup l, String name, MethodType mt) throws Throwable {
+        MlvmTest.getLog().display("Redefined bootstrap(): Lookup " + l + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(l.findStatic(INDIFY_Dummy0.class, "target", mt));
+        return cs;
+    }
+
+    public static Boolean target(Object o, String s, int i) {
+        MlvmTest.getLog().display("Redefined target called! Object = " + o + "; string = " + s + "; int = " + i);
+        MlvmTest.getLog().display("The rest of methods are from " + (isRedefinedClass() ? "redefined" : "original") + " class");
+        return true;
+    }
+
+    public static void redefineNow() {}
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Boolean.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public static boolean invokeTarget() throws Throwable {
+        return invokeTarget0();
+    }
+
+    private static boolean invokeTarget0() throws Throwable {
+        //return (boolean) InvokeDynamic.greet(new Object(), "Redefined", 456);
+        Object o = new Object();
+        String s = "Redefined";
+        int i = 456;
+        return (Boolean) INDY_call().invokeExact(o, s, i);
+    }
+
+    public static boolean isRedefinedClass() {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineClass.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "jvmti.h"
+#include "agent_common.h"
+#include "JVMTITools.h"
+#include "jvmti_tools.h"
+#include "mlvmJvmtiUtils.h"
+
+static jvmtiEnv* gJvmtiEnv = NULL;
+
+static jboolean gIsMethodEntryWorking = JNI_FALSE;
+static jboolean gIsSingleStepWorking = JNI_FALSE;
+static jboolean gIsErrorOccured = JNI_FALSE;
+
+static jboolean gIsDebuggerCompatible = JNI_FALSE;
+
+static jint gPopFrameDepth = 2;
+
+typedef struct TLS {
+    jint countOfFramesToPop;
+} TLSStruct;
+
+static char * gszRedefineTriggerMethodName = "NONE";
+static char * gszRedefinedClassFileName = "NONE";
+static jboolean gIsClassRedefined = JNI_FALSE;
+
+JNIEXPORT void JNICALL
+Java_vm_mlvm_indy_func_jvmti_share_IndyRedefineClass_setRedefineTriggerMethodName(JNIEnv * pEnv, jclass clazz, jstring name) {
+    copyFromJString(pEnv, name, &gszRedefineTriggerMethodName);
+    NSK_DISPLAY1("Setting redefine trigger method name to %s\n", gszRedefineTriggerMethodName);
+}
+
+JNIEXPORT void JNICALL
+Java_vm_mlvm_indy_func_jvmti_share_IndyRedefineClass_setRedefinedClassFileName(JNIEnv * pEnv, jclass clazz, jstring name) {
+    copyFromJString(pEnv, name, &gszRedefinedClassFileName);
+    NSK_DISPLAY1("Setting redefined class name to %s\n", gszRedefinedClassFileName);
+    gIsClassRedefined = JNI_FALSE;
+}
+
+JNIEXPORT void JNICALL
+Java_vm_mlvm_indy_func_jvmti_share_IndyRedefineClass_setPopFrameDepthAfterRedefine(JNIEnv * pEnv, jclass clazz, jint depth) {
+    gPopFrameDepth = depth;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_vm_mlvm_indy_func_jvmti_share_IndyRedefineClass_checkStatus(JNIEnv * pEnv, jclass clazz) {
+        NSK_DISPLAY0("The following values should be non-zero for test to pass:\n");
+    NSK_DISPLAY1("Method entry event fired? %i\n", gIsMethodEntryWorking);
+    NSK_DISPLAY1("Single step event fired? %i\n", gIsSingleStepWorking);
+        NSK_DISPLAY0("The following value should be zero for test to pass:\n");
+    NSK_DISPLAY1("Any other error occured? %i\n", gIsErrorOccured);
+    return gIsMethodEntryWorking && gIsSingleStepWorking && ! gIsErrorOccured;
+}
+
+static void popFrameLogic(jvmtiEnv * jvmti_env, jthread thread) {
+
+    TLSStruct * tls = (TLSStruct *) getTLS(jvmti_env, thread, sizeof(TLSStruct));
+
+    if ( ! tls )
+        return;
+
+    if ( tls->countOfFramesToPop <= 0 ) {
+
+        NSK_DISPLAY0("Disabling single step\n");
+        if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, JVMTI_DISABLE, JVMTI_EVENT_SINGLE_STEP, NULL)) )
+            gIsErrorOccured = JNI_TRUE;
+
+    } else {
+
+        NSK_DISPLAY0("Enabling single step\n");
+        if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, JVMTI_ENABLE, JVMTI_EVENT_SINGLE_STEP, NULL)) )
+            gIsErrorOccured = JNI_TRUE;
+
+        if ( tls->countOfFramesToPop == 1 ) {
+            NSK_DISPLAY0("Popping a frame\n");
+            if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB2(PopFrame, jvmti_env, thread)) )
+                gIsErrorOccured = JNI_TRUE;
+        } else {
+            NSK_DISPLAY0("Forcing early return\n");
+            if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB2(ForceEarlyReturnVoid, jvmti_env, thread)) )
+                gIsErrorOccured = JNI_TRUE;
+        }
+
+        --tls->countOfFramesToPop;
+    }
+}
+
+static void JNICALL
+MethodEntry(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread,
+            jmethodID method) {
+
+    struct MethodName * mn;
+        TLSStruct * tls;
+    jclass clazz;
+
+    gIsMethodEntryWorking = JNI_TRUE;
+    mn = getMethodName(jvmti_env, method);
+    if ( ! mn )
+        return;
+
+    if ( strcmp(mn->methodName, gszRedefineTriggerMethodName) != 0 ) {
+        free(mn);
+        return;
+    }
+
+    NSK_DISPLAY2("Entering redefine tigger method: %s.%s\n", mn->classSig, mn->methodName);
+    free(mn); mn = NULL;
+
+    if ( gIsClassRedefined ) {
+        NSK_DISPLAY0("Class is already redefined.\n");
+        return;
+    }
+
+    NSK_DISPLAY1("Redefining class %s\n", gszRedefinedClassFileName);
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(GetMethodDeclaringClass, jvmti_env, method, &clazz)) )
+        return;
+
+    if ( ! NSK_VERIFY(nsk_jvmti_redefineClass(jvmti_env, clazz, gszRedefinedClassFileName)) ) {
+        gIsErrorOccured = JNI_TRUE;
+        return;
+    }
+
+    gIsClassRedefined = JNI_TRUE;
+
+    tls = (TLSStruct *) getTLS(jvmti_env, thread, sizeof(TLSStruct));
+    tls->countOfFramesToPop = gPopFrameDepth;
+
+    popFrameLogic(jvmti_env, thread);
+}
+
+static void JNICALL
+SingleStep(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread,
+            jmethodID method,
+            jlocation location) {
+
+        char * locStr;
+    gIsSingleStepWorking = JNI_TRUE;
+    locStr = locationToString(jvmti_env, method, location);
+    NSK_DISPLAY1("Single step event: %s\n", locStr);
+    free(locStr);
+
+    popFrameLogic(jvmti_env, thread);
+}
+
+jint Agent_Initialize(JavaVM * vm, char * options, void * reserved) {
+    jvmtiEventCallbacks callbacks;
+    jvmtiCapabilities caps;
+
+    if ( ! NSK_VERIFY(nsk_jvmti_parseOptions(options)) )
+        return JNI_ERR;
+
+    if ( ! NSK_VERIFY((gJvmtiEnv = nsk_jvmti_createJVMTIEnv(vm, reserved)) != NULL) )
+        return JNI_ERR;
+
+    if ( nsk_jvmti_findOptionValue("debuggerCompatible") ) {
+        gIsDebuggerCompatible = JNI_TRUE;
+    }
+
+    memset(&caps, 0, sizeof(caps));
+    caps.can_generate_method_entry_events = 1;
+    caps.can_generate_single_step_events = 1;
+    caps.can_pop_frame = 1;
+    caps.can_force_early_return = 1;
+    caps.can_redefine_classes = 1;
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, gJvmtiEnv, &caps)) )
+        return JNI_ERR;
+
+    memset(&callbacks, 0, sizeof(callbacks));
+    callbacks.MethodEntry = &MethodEntry;
+    callbacks.SingleStep = &SingleStep;
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetEventCallbacks, gJvmtiEnv, &callbacks, sizeof(callbacks))) )
+            return JNI_ERR;
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_ENABLE, JVMTI_EVENT_METHOD_ENTRY, NULL) ) )
+            return JNI_ERR;
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_DISABLE, JVMTI_EVENT_SINGLE_STEP, NULL) ) )
+            return JNI_ERR;
+
+    return JNI_OK;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineClass.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.share;
+
+public class IndyRedefineClass {
+
+    public static native void setRedefineTriggerMethodName(String name);
+    public static native void setRedefinedClassFileName(String name);
+    public static native void setPopFrameDepthAfterRedefine(int depth);
+
+    public static native boolean checkStatus();
+
+    static {
+        System.loadLibrary(IndyRedefineClass.class.getSimpleName());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/IndyRedefineTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.func.jvmti.share;
+
+import java.io.File;
+import java.lang.reflect.Method;
+
+import vm.mlvm.share.MlvmTest;
+import vm.share.options.Option;
+
+public class IndyRedefineTest extends MlvmTest {
+
+    @Option(name="dummyClassName", description="Redefined class FQDN")
+    private String dummyClassName = null;
+
+    private static final int CYCLES_COUNT = 2;
+
+    public boolean run() throws Throwable {
+        IndyRedefineClass.setRedefinedClassFileName(dummyClassName.replace('.', File.separatorChar));
+        IndyRedefineClass.setRedefineTriggerMethodName("redefineNow");
+
+        Class<?> dummyClass = Class.forName(dummyClassName);
+        Method mInvokeTarget = dummyClass.getDeclaredMethod("invokeTarget");
+        Method mIsRedefinedClass = dummyClass.getDeclaredMethod("isRedefinedClass");
+
+        for ( int i = 0; i < CYCLES_COUNT; i++ ) {
+            if ( ! (Boolean) mInvokeTarget.invoke(null) )
+                markTestFailed("Error: the original target method was called\n");
+
+            if ( ! (Boolean) mIsRedefinedClass.invoke(null) )
+                markTestFailed("Error: the class was not redefined\n");
+        }
+
+        if ( ! IndyRedefineClass.checkStatus() )
+            markTestFailed("Error: failures in native code. Please see verbose log");
+
+        return true;
+    }
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/share/libIndyRedefineClass.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include "agent_common.c"
+#include "JVMTITools.c"
+#include "nsk_tools.c"
+#include "jni_tools.c"
+#include "native_thread.c"
+#include "agent_tools.c"
+#include "jvmti_tools.c"
+#include "mlvmJvmtiUtils.c"
+#include "IndyRedefineClass.c"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/INDIFY_Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/func/jvmti/stepBreakPopReturn.
+ * VM Testbase keywords: [feature_mlvm, jvmti, noJFR]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test calls a boostrap and a target methods via InvokeDynamic call, verifying that the
+ *     following JVMTI events are firing:
+ *     - MethodEntry
+ *     - SingleStep
+ *     - Breakpoint
+ *     Also it calls JVMTI function PopFrame() from the bootstrap method
+ *     and ForceEarlyReturn() function from the target method
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.func.jvmti.stepBreakPopReturn.INDIFY_Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      -agentlib:stepBreakPopReturn=verbose=
+ *      vm.mlvm.indy.func.jvmti.stepBreakPopReturn.INDIFY_Test
+ */
+
+package vm.mlvm.indy.func.jvmti.stepBreakPopReturn;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandles.Lookup;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Test extends MlvmTest {
+
+    public static native void setDebuggeeMethodName(String name);
+    public static native void setDebuggeeClassName(String name);
+    public static native boolean checkStatus();
+
+    static {
+        System.loadLibrary("stepBreakPopReturn");
+    }
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(CallSite.class, Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Test.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static CallSite bootstrap(Lookup c, String name, MethodType mt) throws Throwable {
+        int i = 0; // For single step
+        getLog().trace(i, "Lookup " + c + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(MethodHandles.lookup().findStatic(
+                INDIFY_Test.class,
+                "target",
+                MethodType.methodType(int.class, Object.class, String.class, int.class)));
+        return cs;
+    }
+
+    public static int target(Object o, String s, int i) {
+        int j = 0; // For single step event
+        getLog().trace(0, "Target called! Object = " + o + "; string = " + s + "; int = " + i);
+        return i;
+    }
+
+    private static MethodHandle INDY_call1;
+    private static MethodHandle INDY_call1() throws Throwable {
+        if (INDY_call1 != null)
+            return INDY_call1;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(int.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    private static MethodHandle INDY_call2;
+    private static MethodHandle INDY_call2() throws Throwable {
+        if (INDY_call2 != null)
+            return INDY_call2;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(int.class, Object.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public boolean run() throws Throwable {
+        setDebuggeeClassName("L" + INDIFY_Test.class.getName().replace('.', '/') + ";");
+        setDebuggeeMethodName("target");
+
+        Object o = new Object();
+        String s = "heaven";
+        int i = 789;
+
+        // When agent is loaded and correctly working, every call to target() should return 0
+        // (without agent target() returns 3rd argument)
+        // so the sum variable should be 0 at every moment
+        getLog().trace(0, "Call site 1");
+        int sum = (int) INDY_call1().invokeExact(o, s, i);
+        for ( i = 0; i < 5; i++ ) {
+            getLog().trace(0, "Call site 2, sum=" + sum);
+            sum += (int) INDY_call2().invokeExact(o, s, i + 789);
+        }
+        getLog().trace(0, "Direct call, sum=" + sum);
+        sum += target(new Object(), "hell", 123);
+
+        getLog().trace(0, "Done, sum=" + sum + " (should be 0)");
+
+        return checkStatus() && sum == 0;
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/libstepBreakPopReturn.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include "agent_common.c"
+#include "native_thread.c"
+#include "agent_tools.c"
+#include "JVMTITools.c"
+#include "nsk_tools.c"
+#include "jni_tools.c"
+#include "jvmti_tools.c"
+#include "mlvmJvmtiUtils.c"
+#include "stepBreakPopReturn.c"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/func/jvmti/stepBreakPopReturn/stepBreakPopReturn.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "jvmti.h"
+#include "agent_common.h"
+#include "JVMTITools.h"
+#include "jvmti_tools.h"
+#include "mlvmJvmtiUtils.h"
+
+static jvmtiEnv* gJvmtiEnv = NULL;
+
+static char * gszDebuggeeMethodName = "NONE";
+static char * gszDebuggeeClassName = "NONE";
+static jboolean gIsMethodEntryWorking = JNI_FALSE;
+static jboolean gIsSingleStepWorking = JNI_FALSE;
+static jboolean gIsBreakpointWorking = JNI_FALSE;
+
+static jboolean gIsBreakpointSet = JNI_FALSE;
+static jboolean gIsFirstCall = JNI_TRUE;
+static jboolean gIsDebuggerCompatible = JNI_FALSE;
+
+JNIEXPORT void JNICALL
+Java_vm_mlvm_indy_func_jvmti_stepBreakPopReturn_INDIFY_1Test_setDebuggeeMethodName(JNIEnv * pEnv, jclass clazz, jstring name) {
+    copyFromJString(pEnv, name, &gszDebuggeeMethodName);
+    NSK_DISPLAY1("Setting debuggee method name to %s\n", gszDebuggeeMethodName);
+}
+
+JNIEXPORT void JNICALL
+Java_vm_mlvm_indy_func_jvmti_stepBreakPopReturn_INDIFY_1Test_setDebuggeeClassName(JNIEnv * pEnv, jclass clazz, jstring name) {
+    copyFromJString(pEnv, name, &gszDebuggeeClassName);
+    NSK_DISPLAY1("Setting debuggee class name to %s\n", gszDebuggeeClassName);
+}
+
+JNIEXPORT jboolean JNICALL
+Java_vm_mlvm_indy_func_jvmti_stepBreakPopReturn_INDIFY_1Test_checkStatus(JNIEnv * pEnv, jclass clazz) {
+    NSK_DISPLAY1("Are we running in debugger-compatible mode? %i\n", gIsDebuggerCompatible);
+    NSK_DISPLAY0("The following values should be non-zero for test to pass:\n");
+    NSK_DISPLAY1("Method entry event fired? %i\n", gIsMethodEntryWorking);
+    NSK_DISPLAY1("Single step event fired? %i\n", gIsSingleStepWorking);
+    if ( ! gIsDebuggerCompatible )
+        NSK_DISPLAY1("Breakpoint event fired? %i\n", gIsBreakpointWorking);
+
+    return gIsMethodEntryWorking && gIsSingleStepWorking && (gIsBreakpointWorking || gIsDebuggerCompatible);
+}
+
+static void JNICALL
+MethodEntry(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread,
+            jmethodID method) {
+
+    struct MethodName * mn;
+
+    mn = getMethodName(jvmti_env, method);
+    if ( ! mn )
+        return;
+
+    if ( strcmp(mn->classSig, gszDebuggeeClassName) == 0 ) {
+        NSK_DISPLAY2("Entering method: %s.%s\n", mn->classSig, mn->methodName);
+
+        if ( strcmp(mn->methodName, gszDebuggeeMethodName) == 0 ) {
+            gIsMethodEntryWorking = JNI_TRUE;
+
+            if ( ! gIsBreakpointSet )
+                NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, JVMTI_ENABLE, JVMTI_EVENT_SINGLE_STEP, NULL));
+        }
+    }
+
+    free(mn);
+}
+
+static void JNICALL
+SingleStep(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread,
+            jmethodID method,
+            jlocation location) {
+
+    char * locStr;
+    gIsSingleStepWorking = JNI_TRUE;
+
+    locStr = locationToString(jvmti_env, method, location);
+    NSK_DISPLAY1("Single step event: %s\n", locStr);
+    free(locStr);
+
+    NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_DISABLE, JVMTI_EVENT_SINGLE_STEP, NULL));
+
+    if ( ! gIsDebuggerCompatible ) {
+        if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetBreakpoint, jvmti_env, method, location)) )
+            return;
+
+        NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_ENABLE, JVMTI_EVENT_BREAKPOINT, NULL));
+        gIsBreakpointSet = JNI_TRUE;
+
+        NSK_DISPLAY0("Pop a frame\n");
+        NSK_JVMTI_VERIFY(NSK_CPP_STUB2(PopFrame, gJvmtiEnv, thread));
+    } else {
+        if ( gIsFirstCall ) {
+            NSK_DISPLAY0("Pop a frame\n");
+            NSK_JVMTI_VERIFY(NSK_CPP_STUB2(PopFrame, gJvmtiEnv, thread));
+            gIsFirstCall = JNI_FALSE;
+        } else {
+            gIsFirstCall = JNI_TRUE;
+        }
+    }
+}
+
+static void JNICALL
+Breakpoint(jvmtiEnv *jvmti_env,
+            JNIEnv* jni_env,
+            jthread thread,
+            jmethodID method,
+            jlocation location) {
+
+
+    char * locStr;
+    gIsBreakpointWorking = JNI_TRUE;
+
+    locStr = locationToString(jvmti_env, method, location);
+    NSK_DISPLAY1("Breakpoint event at: %s\n", locStr);
+    free(locStr);
+
+    NSK_JVMTI_VERIFY(NSK_CPP_STUB3(ClearBreakpoint, jvmti_env, method, location));
+    NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_DISABLE, JVMTI_EVENT_BREAKPOINT, NULL));
+    gIsBreakpointSet = JNI_FALSE;
+
+    NSK_DISPLAY0("Forcing early return.\n");
+    NSK_JVMTI_VERIFY(NSK_CPP_STUB3(ForceEarlyReturnInt, jvmti_env, thread, 0));
+}
+
+jint Agent_Initialize(JavaVM * vm, char * options, void * reserved) {
+    jvmtiEventCallbacks callbacks;
+    jvmtiCapabilities caps;
+
+    if ( ! NSK_VERIFY(nsk_jvmti_parseOptions(options)) )
+        return JNI_ERR;
+
+    if ( ! NSK_VERIFY((gJvmtiEnv = nsk_jvmti_createJVMTIEnv(vm, reserved)) != NULL) )
+        return JNI_ERR;
+
+    if ( nsk_jvmti_findOptionValue("debuggerCompatible") ) {
+        gIsDebuggerCompatible = JNI_TRUE;
+    }
+
+    memset(&caps, 0, sizeof(caps));
+    caps.can_generate_method_entry_events = 1;
+    caps.can_generate_single_step_events = 1;
+    caps.can_generate_breakpoint_events = ! gIsDebuggerCompatible;
+    caps.can_pop_frame = 1;
+    caps.can_force_early_return = 1;
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, gJvmtiEnv, &caps)) )
+        return JNI_ERR;
+
+    memset(&callbacks, 0, sizeof(callbacks));
+    callbacks.MethodEntry = &MethodEntry;
+    callbacks.SingleStep = &SingleStep;
+    callbacks.Breakpoint = &Breakpoint;
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetEventCallbacks, gJvmtiEnv, &callbacks, sizeof(callbacks))) )
+        return JNI_ERR;
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(SetEventNotificationMode, gJvmtiEnv, JVMTI_ENABLE, JVMTI_EVENT_METHOD_ENTRY, NULL) ) )
+        return JNI_ERR;
+
+    return JNI_OK;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/CallSiteDekkerActor.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.share;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.CallSite;
+import vm.mlvm.share.DekkerTest;
+
+/**
+ * The class implements Actor for {@link vm.mlvm.share.DekkerTest}.
+ * <p>
+ * This Actor switches targets for CallSite objects supplied in constructor.
+ * Targets are method handles, generated with MethodHandle.constant(), which return true or false.
+ * CallSite.setTarget() is used for setting appropriate target.
+ * CallSite.dynamicInvoker().invokeExact() is used to detect which target is currently set.
+ * No synchronization is used between setter and getter (see {@link vm.mlvm.share.DekkerTest} for details).
+ *
+ * @see vm.mlvm.share.DekkerTest
+ */
+public class CallSiteDekkerActor implements DekkerTest.Actor {
+
+    public static final MethodHandle MH_FALSE = MethodHandles.constant(Boolean.class, false);
+    public static final MethodHandle MH_TRUE = MethodHandles.constant(Boolean.class, true);
+
+    private final CallSite a;
+    private final CallSite b;
+
+    public CallSiteDekkerActor(CallSite csa, CallSite csb) {
+        a = csa;
+        b = csb;
+    }
+
+    @Override
+    public void reset() {
+        a.setTarget(MH_FALSE);
+        b.setTarget(MH_FALSE);
+    }
+
+    @Override
+    public boolean actorA() throws Throwable {
+        a.setTarget(MH_TRUE);
+        return (Boolean) b.dynamicInvoker().invokeExact();
+    }
+
+    @Override
+    public boolean actorB() throws Throwable {
+        b.setTarget(MH_TRUE);
+        return (Boolean) a.dynamicInvoker().invokeExact();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/INDIFY_RelinkCallSiteFreqTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,243 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.share;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.CyclicBarrier;
+
+import nsk.share.test.Stresser;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.share.options.Option;
+
+/**
+ * The test creates a call site (the call site is supplied by subclass)
+ * and relinks it from one thread while calling the current
+ * target from the other one. Currently there are 6 targets.
+
+ * The test verifies that target changes in the call site are eventually seen by target calling
+ * thread by measuring a frequency of calls for each target and comparing it with theoretical frequency.
+ *
+ */
+public abstract class INDIFY_RelinkCallSiteFreqTest extends MlvmTest {
+    private static final int MEASUREMENT_THREADS = Math.max(2, Runtime.getRuntime().availableProcessors() - 1);
+    private static final double MAX_FREQ_DIFFERENCE = 0.01;
+    private static CallSite cs;
+
+    private volatile boolean testDone = false;
+
+    @Option(name = "iterations", default_value = "100000", description = "Iterations, each iteration does call site relinking")
+    private int iterations = 100_000;
+
+    /**
+     * Provides a call site to test.
+     * @param mh MethodHandle to link the new call site to
+     * @return CallSite A new call site linked to MethodHandle supplied in the argument
+     */
+    protected abstract CallSite createCallSite(MethodHandle mh);
+
+    @Override
+    public boolean run() throws Throwable {
+        // Create targets and call site
+        Target[] targets = Target.createTargets(MethodHandles.lookup(), this);
+        // TODO: find a way to make cs a non-static field
+        cs = createCallSite(targets[0].mh);
+
+        // Call BSM
+        indyWrapper();
+
+        // Start call site altering thread
+        final FreqMeasurementThread[] csaThread = new FreqMeasurementThread[MEASUREMENT_THREADS];
+        final CyclicBarrier startBarrier = new CyclicBarrier(MEASUREMENT_THREADS + 1);
+        for (int i = 0; i < MEASUREMENT_THREADS; ++i) {
+            csaThread[i] = new FreqMeasurementThread(startBarrier, this, targets.length);
+            csaThread[i].start();
+        }
+
+        // Start calling invokedynamic
+        Stresser stresser = createStresser();
+        stresser.start(iterations);
+        try {
+            int curTarget = 0;
+            startBarrier.await();
+
+            while (stresser.continueExecution()) {
+                stresser.iteration();
+
+                Env.traceDebug("Setting new target: " + curTarget);
+                targets[curTarget].run(cs);
+                if (++curTarget >= targets.length) {
+                    curTarget = 0;
+                }
+            }
+
+        } finally {
+            stresser.finish();
+            testDone = true;
+        }
+
+        long totalCalls = 0L;
+        long[] callHistogram = new long[targets.length];
+        for (int i = 0; i < csaThread.length; ++i) {
+            csaThread[i].join();
+            totalCalls += csaThread[i].totalCalls;
+            long[] threadCallHistogram = csaThread[i].callHistogram;
+            assert threadCallHistogram.length == callHistogram.length;
+            for (int t = 0; t < callHistogram.length; ++t) {
+                callHistogram[t] += threadCallHistogram[t];
+            }
+        }
+
+        Env.traceNormal("Targets called " + totalCalls + " times");
+
+        for (int i = 0; i < callHistogram.length; ++i) {
+            float measuredFreq = (float) callHistogram[i] / totalCalls;
+            float theoreticalFreq = (float) targets[i].delay / Target.TOTAL_DELAY;
+
+            boolean freqIsOK =  Math.abs(measuredFreq - theoreticalFreq) < MAX_FREQ_DIFFERENCE;
+            String msg = String.format("Target %d: theoretical freq=%f; measured freq=%f; called %d times %s",
+                    i, theoreticalFreq, measuredFreq, callHistogram[i], freqIsOK ? " [OK]" : " [BAD, but acceptable: difference is too big]");
+
+            // This test used to fail due to OS scheduler
+            // so it was refactored to just a stress test which doesn't fail if the frequency is wrong
+            if (!freqIsOK) {
+                Env.complain(msg);
+            } else {
+                Env.traceNormal(msg);
+            }
+        }
+
+        return true;
+    }
+
+    private static class Target {
+        // TODO: nanosleep?
+        private static final long[] DELAYS = new long[] { 1L, 3L, 5L, 7L, 9L, 11L };
+        public static final long TOTAL_DELAY;
+        static {
+            long total = 0L;
+            for (long i : DELAYS) {
+                total += i;
+            }
+            TOTAL_DELAY = total;
+        }
+        public static Target[] createTargets(MethodHandles.Lookup lookup, INDIFY_RelinkCallSiteFreqTest test) {
+            Target[] result = new Target[DELAYS.length];
+            MethodHandle targetMH;
+            try {
+                targetMH = lookup.findVirtual(INDIFY_RelinkCallSiteFreqTest.class, "target", MethodType.methodType(int.class, int.class));
+            } catch (NoSuchMethodException | IllegalAccessException e) {
+                throw new Error(e);
+            }
+            for (int i = 0; i < result.length; ++i) {
+                result[i] = new Target(DELAYS[i], MethodHandles.insertArguments(targetMH, 0, test, i));
+            }
+            return result;
+        }
+
+        public final long delay;
+        public final MethodHandle mh;
+        public Target(long delay, MethodHandle mh) {
+            this.delay = delay;
+            this.mh = mh;
+        }
+        public void run(CallSite cs) throws InterruptedException {
+            cs.setTarget(mh);
+            Thread.sleep(delay);
+        }
+    }
+
+    private static class FreqMeasurementThread extends Thread {
+        final long[] callHistogram;
+        long totalCalls = 0L;
+
+        private final CyclicBarrier startBarrier;
+        private final INDIFY_RelinkCallSiteFreqTest test;
+
+        public FreqMeasurementThread(CyclicBarrier startBarrier, INDIFY_RelinkCallSiteFreqTest test, int targetCount) {
+            setName(getClass().getSimpleName());
+            this.startBarrier = startBarrier;
+            this.test = test;
+            callHistogram = new long[targetCount];
+        }
+
+        @Override
+        public void run() {
+            try {
+                startBarrier.await();
+
+                while (!test.testDone) {
+                    int n = indyWrapper();
+                    ++callHistogram[n];
+                    ++totalCalls;
+                    Env.traceDebug("Called target: " + n);
+
+                    Thread.yield();
+                }
+            } catch (BrokenBarrierException e) {
+                test.markTestFailed("TEST BUG: start barrier is not working", e);
+            } catch (Throwable t) {
+                test.markTestFailed("Exception in thread " + getName(), t);
+            }
+        }
+    }
+
+    // BSM + target
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(Object.class, MethodHandles.Lookup.class, String.class, MethodType.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(INDIFY_RelinkCallSiteFreqTest.class, "bootstrap", MT_bootstrap());
+    }
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null) {
+          return INDY_call;
+        }
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MethodType.methodType(int.class));
+        return cs.dynamicInvoker();
+    }
+
+    public static int indyWrapper() throws Throwable {
+        return (int) INDY_call().invokeExact();
+    }
+
+    private static Object bootstrap(MethodHandles.Lookup l, String n, MethodType t) throws Throwable {
+        Env.traceVerbose("Bootstrap called");
+        return INDIFY_RelinkCallSiteFreqTest.cs;
+    }
+
+    private int target(int n) {
+        return n;
+    }
+
+    // End BSM + target
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/share/INDIFY_RelinkCallSiteTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,232 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.share;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.CyclicBarrier;
+
+import nsk.share.test.Stresser;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+
+public abstract class INDIFY_RelinkCallSiteTest extends MlvmTest {
+
+    private static final int TARGET_COUNT = 1000000;
+    private static final int ARTIFICALLY_LOST_SYNC_PERIOD = 1000;
+    private static final CyclicBarrier startBarrier = new CyclicBarrier(2);
+
+    /**
+     * This class is used for synchronization between threads during relinking.
+     *
+     * We don't use volatile, synchronized(), or java.util.concurrent stuff
+     * to avoid artificial ordering across threads, except the one introduced by java.lang.invoke
+     * package itself.
+     *
+     * The variable is placed inside an array to make sure that it would occupy
+     * a separate CPU cache line than the CallSite.
+     *
+     * value < 0 and -value == previous-call-site-num: test in call site changing thread
+     * value > 0 and value == current-call-site-num:   test in target (invokedynamic) calling thread
+     * value == 0: test is done, all threads must exit
+     */
+    static class Sync {
+        int[] sync = new int[64];
+
+        int get() {
+            return this.sync[32];
+        }
+
+        void put (int v) {
+            this.sync[32] = v;
+        }
+    }
+
+    static Sync syncTargetNum = new Sync();
+    static CallSite cs;
+    static MethodHandle[] targets = new MethodHandle[TARGET_COUNT];
+
+    protected abstract CallSite createCallSite(MethodHandle mh);
+
+    @Override
+    public boolean run() throws Throwable {
+        // Create targets
+        MethodHandle targetMH = MethodHandles.lookup().findVirtual(INDIFY_RelinkCallSiteTest.class, "target", MethodType.methodType(int.class, int.class));
+        for (int i = 0; i < TARGET_COUNT; i++)
+            INDIFY_RelinkCallSiteTest.targets[i] = MethodHandles.insertArguments(targetMH, 0, this, i);
+
+        // Set current target number
+        INDIFY_RelinkCallSiteTest.syncTargetNum.put(1);
+
+        // Create call site
+        INDIFY_RelinkCallSiteTest.cs = createCallSite(INDIFY_RelinkCallSiteTest.targets[INDIFY_RelinkCallSiteTest.syncTargetNum.get()]);
+
+        // Call BSM
+        indyWrapper();
+
+        // Start call site altering thread
+        CallSiteAlteringThread csaThread = new CallSiteAlteringThread();
+        csaThread.setDaemon(true);
+        csaThread.start();
+
+        try {
+            // Start calling invokedynamic
+            Stresser stresser = createStresser();
+            stresser.start(1);
+            try {
+                int lastTargetNum = INDIFY_RelinkCallSiteTest.syncTargetNum.get();
+                int curTargetNum;
+
+                INDIFY_RelinkCallSiteTest.startBarrier.await();
+
+                while (stresser.continueExecution()) {
+                    stresser.iteration();
+
+                    curTargetNum = indyWrapper();
+
+                    // This test used to fail due to OS scheduler
+                    // so it was refactored to just a stress test which doesn't fail if the frequency is wrong
+                    boolean artificallyLostSync = lastTargetNum % ARTIFICALLY_LOST_SYNC_PERIOD == 0;
+                    if (lastTargetNum == curTargetNum) {
+                        Env.traceDebug("Target " + curTargetNum + " called: OK");
+                        if (artificallyLostSync) {
+                            Env.complain("Test bug: invoked target (" + curTargetNum + ") should not match the one in CallSite (" + lastTargetNum + ")");
+                        }
+                    } else {
+                        if (artificallyLostSync) {
+                            // That's OK
+                        } else {
+                            Env.complain("Invoked target number (" + curTargetNum + ") does not match the one in CallSite (" + lastTargetNum + ")");
+                        }
+
+                        // OK, let's continue anyway
+                        lastTargetNum = INDIFY_RelinkCallSiteTest.syncTargetNum.get();
+                    }
+
+                    // Synchronize without any "special" synchronization means
+                    int syncCycles = 0;
+                    INDIFY_RelinkCallSiteTest.syncTargetNum.put(-lastTargetNum);
+                    while (INDIFY_RelinkCallSiteTest.syncTargetNum.get() < 0) {
+                        Thread.yield();
+                        curTargetNum = indyWrapper();
+                        syncCycles++;
+
+                        if (syncCycles % 100000 == 0) {
+                            Env.traceDebug("Waiting for change: target " + curTargetNum + " called " + syncCycles + " times");
+                        }
+
+                        if (curTargetNum > lastTargetNum) {
+                            Env.traceDebug("Target changed but not yet signalled to me: curTargetNum (" + curTargetNum + ") > lastTargetNum (" + lastTargetNum + ")");
+                        } else if (curTargetNum < lastTargetNum && !artificallyLostSync) {
+                            Env.complain("Synchronization lost again: curTargetNum (" + curTargetNum + ") < lastTargetNum (" + lastTargetNum + ")");
+                        }
+                    }
+
+                    lastTargetNum = INDIFY_RelinkCallSiteTest.syncTargetNum.get();
+                    if (lastTargetNum == 0) {
+                        stresser.forceFinish();
+                    }
+                }
+
+            } finally {
+                stresser.finish();
+            }
+        } finally {
+            INDIFY_RelinkCallSiteTest.syncTargetNum.put(0);
+        }
+
+        // Return false
+        return true;
+        // (Never trust comments :)
+    }
+
+    static class CallSiteAlteringThread extends Thread {
+        @Override
+        public void run() {
+            int curTargetNum = INDIFY_RelinkCallSiteTest.syncTargetNum.get();
+
+            try {
+                INDIFY_RelinkCallSiteTest.startBarrier.await();
+            } catch ( BrokenBarrierException e ) {
+                Env.complain(e, "Test bug: start barrier is not working");
+            } catch ( InterruptedException leave ) {
+                return;
+            }
+
+            while ( INDIFY_RelinkCallSiteTest.syncTargetNum.get() != 0 ) {
+                while ( INDIFY_RelinkCallSiteTest.syncTargetNum.get() != -curTargetNum )
+                    Thread.yield();
+
+                curTargetNum++;
+                if ( curTargetNum >= TARGET_COUNT ) {
+                    INDIFY_RelinkCallSiteTest.syncTargetNum.put(0);
+                    break;
+                }
+
+                Env.traceDebug("Setting new target: " + curTargetNum);
+                // TODO: Check this and next line ordering in JMM
+                if ( curTargetNum % ARTIFICALLY_LOST_SYNC_PERIOD != 0 )
+                    INDIFY_RelinkCallSiteTest.cs.setTarget(INDIFY_RelinkCallSiteTest.targets[curTargetNum]);
+                INDIFY_RelinkCallSiteTest.syncTargetNum.put(curTargetNum);
+            }
+        }
+    }
+
+    // BSM + target
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(Object.class, Object.class, Object.class, Object.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(INDIFY_RelinkCallSiteTest.class, "bootstrap", MT_bootstrap());
+    }
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null) {
+            return INDY_call;
+        }
+        CallSite cs = (CallSite) MH_bootstrap ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MethodType.methodType(int.class));
+        return cs.dynamicInvoker();
+    }
+
+    public static int indyWrapper() throws Throwable {
+        return (int) INDY_call().invokeExact();
+    }
+
+    private static Object bootstrap (Object l, Object n, Object t) throws Throwable {
+        Env.traceVerbose("Bootstrap called");
+        return INDIFY_RelinkCallSiteTest.cs;
+    }
+
+    private int target(int n) {
+        return n;
+    }
+
+    // End BSM + target
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/INDIFY_Testee.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.stress.gc.lotsOfCallSites;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.ref.PhantomReference;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.util.HashSet;
+
+import vm.mlvm.share.Env;
+
+/**
+ * Testee class, which records calls to bootstrap, target methods and adds callsite created
+ * in the bootstrap to reference queue {@link #objQueue} and references set {@link #references}
+ */
+public class INDIFY_Testee {
+    /**
+     * Set to true, when bootstrap method is called
+     */
+    public static boolean bootstrapCalled = false;
+    /**
+     * Set to true when target method is called
+     */
+    public static boolean targetCalled = false;
+
+    /**
+     * Should be set by the test before call to {@link #indyWrapper()}
+     * A reference to the call site created in bootstrap method is added to this set.
+     */
+    public static HashSet<PhantomReference<CallSite>> references;
+
+    /**
+     * Should be set by the test before call to {@link #indyWrapper()}
+     * A reference to the call site created in bootstrap method is added to this queue.
+     */
+    public static ReferenceQueue<CallSite> objQueue;
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(Object.class, Object.class, Object.class, Object.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(INDIFY_Testee.class, "bootstrap", MT_bootstrap());
+    }
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null) {
+            return INDY_call;
+        }
+        CallSite cs = (CallSite) MH_bootstrap ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_target());
+        return cs.dynamicInvoker();
+    }
+
+    /**
+     * Calls invokedynamic instruction
+     */
+    public static void indyWrapper() throws Throwable {
+        INDY_call().invokeExact();
+    }
+
+    private static Object bootstrap(Object l, Object n, Object t) throws Throwable {
+        Env.traceDebug("Bootstrap called");
+        bootstrapCalled = true;
+        CallSite cs = new ConstantCallSite(MethodHandles.lookup().findStatic(INDIFY_Testee.class, "target", MT_target()));
+        references.add(new PhantomReference<CallSite>(cs, objQueue));
+        return cs;
+    }
+
+    private static MethodType MT_target() {
+        return MethodType.methodType(void.class);
+    }
+
+    private static void target() {
+        Env.traceDebug("Target called");
+        targetCalled = true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,247 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/stress/gc/lotsOfCallSites.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ * @build sun.hotspot.WhiteBox
+ * @run driver ClassFileInstaller sun.hotspot.WhiteBox
+ *                                sun.hotspot.WhiteBox$WhiteBoxPermission
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.stress.gc.lotsOfCallSites.Test
+ *        vm.mlvm.indy.stress.gc.lotsOfCallSites.INDIFY_Testee
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm -Xbootclasspath/a:.
+ *                   -XX:+UnlockDiagnosticVMOptions
+ *                   -XX:+WhiteBoxAPI
+ *                   vm.mlvm.indy.stress.gc.lotsOfCallSites.Test
+ */
+
+package vm.mlvm.indy.stress.gc.lotsOfCallSites;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodType;
+import java.lang.ref.PhantomReference;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.management.MemoryMXBean;
+import java.lang.management.MemoryPoolMXBean;
+import java.lang.management.ManagementFactory;
+import java.lang.management.MemoryUsage;
+import java.util.HashSet;
+
+import nsk.share.test.Stresser;
+import vm.mlvm.share.CustomClassLoaders;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.WhiteBoxHelper;
+import vm.share.FileUtils;
+import vm.share.options.Option;
+
+/**
+ * The test creates a lot of CallSites by loading a class with a bootstrap method and invokedynamic
+ * via a custom classloader in a loop.
+ *
+ * The test verifies that all CallSites are "delivered to heaven" by creating a PhantomReference per
+ *  a CallSite and checking the number of references put into a queue.
+ *
+ */
+public class Test extends MlvmTest {
+
+    // TODO (separate bug should be filed): move this option to MlvmTest level
+    @Option(name = "heapdump", default_value = "false", description = "Dump heap after test has finished")
+    private boolean heapDumpOpt = false;
+
+    @Option(name = "iterations", default_value = "100000", description = "Iterations: each iteration loads one new class")
+    private int iterations = 100_000;
+
+    private static final int GC_COUNT = 6;
+    private static final boolean TERMINATE_ON_FULL_METASPACE = false;
+
+    private static final ReferenceQueue<CallSite> objQueue = new ReferenceQueue<CallSite>();
+    private static final HashSet<PhantomReference<CallSite>> references = new HashSet<PhantomReference<CallSite>>();
+    private static long loadedClassCount = 0;
+
+    // We avoid direct references to the testee class to avoid loading it by application class loader
+    // Otherwise the testee class is loaded both by the custom and the application class loaders,
+    // and when java.lang.invoke.MH.COMPILE_THRESHOLD={0,1} is defined, the test fails with
+    // "java.lang.IncompatibleClassChangeError: disagree on InnerClasses attribute"
+    private static final String TESTEE_CLASS_NAME = Test.class.getPackage().getName() + "." + "INDIFY_Testee";
+    private static final String TESTEE_REFERENCES_FIELD = "references";
+    private static final String TESTEE_OBJQUEUE_FIELD = "objQueue";
+    private static final String TESTEE_BOOTSTRAP_CALLED_FIELD = "bootstrapCalled";
+    private static final String TESTEE_TARGET_CALLED_FIELD = "targetCalled";
+    private static final String TESTEE_INDY_METHOD = "indyWrapper";
+
+    private static int removeQueuedReferences() {
+        int count = 0;
+        Reference<? extends CallSite> r;
+        while ((r = objQueue.poll()) != null) {
+            if (!references.remove(r)) {
+                Env.traceNormal("Reference " + r + " was not registered!");
+            }
+            ++count;
+        }
+        if (count > 0) {
+            Env.traceVerbose("Removed " + count + " phantom references");
+        } else {
+            Env.traceDebug("Removed " + count + " phantom references");
+        }
+        return count;
+    }
+
+    private MemoryPoolMXBean getClassMetadataMemoryPoolMXBean() {
+    MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
+    for (MemoryPoolMXBean memPool : ManagementFactory.getMemoryPoolMXBeans()) {
+            String name = memPool.getName();
+        if ((name.contains("Compressed class space") || name.contains("Metaspace")) && memPool.getUsage() != null) {
+                return memPool;
+            }
+        }
+        return null;
+    }
+
+    private MethodHandle getFullGCMethod() throws NoSuchMethodException, IllegalAccessException {
+        try {
+            return WhiteBoxHelper.getMethod("fullGC", MethodType.methodType(void.class));
+        } catch (NoSuchMethodException | ClassNotFoundException | InvocationTargetException e) {
+            Env.traceDebug(e, "No WhiteBox API. Will use System.gc() instead of WhiteBox.fullGC()");
+            return MethodHandles.lookup().findStatic(System.class, "gc", MethodType.methodType(void.class));
+        }
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+        setHeapDumpAfter(heapDumpOpt);
+
+        final byte[] classBytes = FileUtils.readClass(TESTEE_CLASS_NAME);
+        final MemoryPoolMXBean classMetadataPoolMXB = getClassMetadataMemoryPoolMXBean();
+        final String memPoolName = classMetadataPoolMXB == null ? "" : classMetadataPoolMXB.getName();
+
+        MethodHandle mhCollectHeap = getFullGCMethod();
+
+        int removedEntries = 0;
+
+        Stresser stresser = createStresser();
+        stresser.start(iterations);
+        try {
+            while (stresser.continueExecution()) {
+                stresser.iteration();
+
+                iteration(classBytes, TESTEE_CLASS_NAME);
+                removedEntries += removeQueuedReferences();
+
+                if (stresser.getIteration() % 1000 == 0) {
+                    Env.traceNormal("Iterations: " + stresser.getIteration() + " removed entries: " + removedEntries);
+                    if (TERMINATE_ON_FULL_METASPACE && classMetadataPoolMXB != null) {
+                        MemoryUsage mu = classMetadataPoolMXB.getUsage();
+                        Env.traceNormal(memPoolName + " usage: " + mu);
+                        if  (mu.getUsed() >= mu.getMax() * 9 / 10) {
+                            Env.traceNormal(memPoolName + " is nearly out of space: " + mu + ". Terminating.");
+                            break;
+                        }
+                    }
+                }
+            }
+
+        } catch (OutOfMemoryError e) {
+            Env.traceNormal(e, "Out of memory. This is OK");
+        } finally {
+            stresser.finish();
+        }
+
+        for (int i = 0; i < GC_COUNT; ++i) {
+            mhCollectHeap.invoke();
+            Thread.sleep(500);
+            removedEntries += removeQueuedReferences();
+        }
+
+        removedEntries += removeQueuedReferences();
+
+        Env.traceNormal("Loaded classes: " + loadedClassCount
+                      + "; References left in set: " + references.size()
+                      + "; References removed from queue: " + removedEntries);
+
+        if (references.size() != 0 || removedEntries != loadedClassCount) {
+            Env.complain("Not all of the created CallSites were GC-ed");
+            return false;
+        }
+
+        return true;
+    }
+
+    private void iteration(byte[] classBytes, String indyClassName) throws Throwable {
+        ClassLoader cl = CustomClassLoaders.makeClassBytesLoader(classBytes, indyClassName);
+        Class<?> c = cl.loadClass(indyClassName);
+        ++loadedClassCount;
+
+        if (c.getClassLoader() != cl) {
+            throw new RuntimeException("Invalid class loader: " + c.getClassLoader() + "; required=" + cl);
+        }
+
+        Field vr = c.getDeclaredField(TESTEE_REFERENCES_FIELD);
+        vr.set(null, references);
+
+        Field voq = c.getDeclaredField(TESTEE_OBJQUEUE_FIELD);
+        voq.set(null, objQueue);
+
+        Field vbc = c.getDeclaredField(TESTEE_BOOTSTRAP_CALLED_FIELD);
+        if (vbc.getBoolean(null)) {
+            throw new RuntimeException(TESTEE_BOOTSTRAP_CALLED_FIELD + " flag should not be set. Not a fresh copy of the testee class?");
+        }
+
+        Field vt = c.getDeclaredField(TESTEE_TARGET_CALLED_FIELD);
+        if (vt.getBoolean(null)) {
+            throw new RuntimeException(TESTEE_TARGET_CALLED_FIELD + " flag should not be set. Not a fresh copy of the testee class?");
+        }
+
+        Method m = c.getDeclaredMethod(TESTEE_INDY_METHOD);
+        m.invoke(null);
+
+        if (!vbc.getBoolean(null) ) {
+            throw new RuntimeException("Bootstrap method of the testee class was not called");
+        }
+
+        if (!vt.getBoolean(null) ) {
+            throw new RuntimeException("Target method of the testee class was not called");
+        }
+    }
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,13108 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// generated from vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.jmpp
+
+package vm.mlvm.indy.stress.java.loopsAndThreads;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.concurrent.atomic.AtomicLong;
+
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MultiThreadedTest;
+import nsk.share.test.Stresser;
+import nsk.share.Failure;
+
+public class INDIFY_Test extends MultiThreadedTest {
+
+    private AtomicLong _counter = new AtomicLong();
+    private AtomicLong _expectedTargetCalls = new AtomicLong();
+
+    public INDIFY_Test() {
+        super();
+    }
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(Object.class, Object.class, Object.class, Object.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws Exception {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Test.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static Object bootstrap(Object c, Object name, Object mt) throws Throwable {
+        Env.traceVerbose("bootstrap: Class " + c + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(
+                MethodHandles.lookup().findVirtual(
+                INDIFY_Test.class,
+                "target",
+                MethodType.methodType(Object.class, String.class, int.class)));
+        return cs;
+    }
+
+    public Object target(String s, int i) {
+        Env.traceDebug("target called");
+        _counter.incrementAndGet();
+        return null;
+    }
+
+    private static MethodHandle INDY_call0;
+    private static MethodHandle INDY_call0 () throws Throwable {
+        if (INDY_call0 != null)
+            return INDY_call0;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call1;
+    private static MethodHandle INDY_call1 () throws Throwable {
+        if (INDY_call1 != null)
+            return INDY_call1;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call2;
+    private static MethodHandle INDY_call2 () throws Throwable {
+        if (INDY_call2 != null)
+            return INDY_call2;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call3;
+    private static MethodHandle INDY_call3 () throws Throwable {
+        if (INDY_call3 != null)
+            return INDY_call3;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call4;
+    private static MethodHandle INDY_call4 () throws Throwable {
+        if (INDY_call4 != null)
+            return INDY_call4;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call5;
+    private static MethodHandle INDY_call5 () throws Throwable {
+        if (INDY_call5 != null)
+            return INDY_call5;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call6;
+    private static MethodHandle INDY_call6 () throws Throwable {
+        if (INDY_call6 != null)
+            return INDY_call6;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call7;
+    private static MethodHandle INDY_call7 () throws Throwable {
+        if (INDY_call7 != null)
+            return INDY_call7;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call8;
+    private static MethodHandle INDY_call8 () throws Throwable {
+        if (INDY_call8 != null)
+            return INDY_call8;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call9;
+    private static MethodHandle INDY_call9 () throws Throwable {
+        if (INDY_call9 != null)
+            return INDY_call9;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call10;
+    private static MethodHandle INDY_call10 () throws Throwable {
+        if (INDY_call10 != null)
+            return INDY_call10;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call11;
+    private static MethodHandle INDY_call11 () throws Throwable {
+        if (INDY_call11 != null)
+            return INDY_call11;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call12;
+    private static MethodHandle INDY_call12 () throws Throwable {
+        if (INDY_call12 != null)
+            return INDY_call12;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call13;
+    private static MethodHandle INDY_call13 () throws Throwable {
+        if (INDY_call13 != null)
+            return INDY_call13;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call14;
+    private static MethodHandle INDY_call14 () throws Throwable {
+        if (INDY_call14 != null)
+            return INDY_call14;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call15;
+    private static MethodHandle INDY_call15 () throws Throwable {
+        if (INDY_call15 != null)
+            return INDY_call15;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call16;
+    private static MethodHandle INDY_call16 () throws Throwable {
+        if (INDY_call16 != null)
+            return INDY_call16;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call17;
+    private static MethodHandle INDY_call17 () throws Throwable {
+        if (INDY_call17 != null)
+            return INDY_call17;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call18;
+    private static MethodHandle INDY_call18 () throws Throwable {
+        if (INDY_call18 != null)
+            return INDY_call18;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call19;
+    private static MethodHandle INDY_call19 () throws Throwable {
+        if (INDY_call19 != null)
+            return INDY_call19;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call20;
+    private static MethodHandle INDY_call20 () throws Throwable {
+        if (INDY_call20 != null)
+            return INDY_call20;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call21;
+    private static MethodHandle INDY_call21 () throws Throwable {
+        if (INDY_call21 != null)
+            return INDY_call21;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call22;
+    private static MethodHandle INDY_call22 () throws Throwable {
+        if (INDY_call22 != null)
+            return INDY_call22;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call23;
+    private static MethodHandle INDY_call23 () throws Throwable {
+        if (INDY_call23 != null)
+            return INDY_call23;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call24;
+    private static MethodHandle INDY_call24 () throws Throwable {
+        if (INDY_call24 != null)
+            return INDY_call24;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call25;
+    private static MethodHandle INDY_call25 () throws Throwable {
+        if (INDY_call25 != null)
+            return INDY_call25;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call26;
+    private static MethodHandle INDY_call26 () throws Throwable {
+        if (INDY_call26 != null)
+            return INDY_call26;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call27;
+    private static MethodHandle INDY_call27 () throws Throwable {
+        if (INDY_call27 != null)
+            return INDY_call27;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call28;
+    private static MethodHandle INDY_call28 () throws Throwable {
+        if (INDY_call28 != null)
+            return INDY_call28;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call29;
+    private static MethodHandle INDY_call29 () throws Throwable {
+        if (INDY_call29 != null)
+            return INDY_call29;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call30;
+    private static MethodHandle INDY_call30 () throws Throwable {
+        if (INDY_call30 != null)
+            return INDY_call30;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call31;
+    private static MethodHandle INDY_call31 () throws Throwable {
+        if (INDY_call31 != null)
+            return INDY_call31;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call32;
+    private static MethodHandle INDY_call32 () throws Throwable {
+        if (INDY_call32 != null)
+            return INDY_call32;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call33;
+    private static MethodHandle INDY_call33 () throws Throwable {
+        if (INDY_call33 != null)
+            return INDY_call33;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call34;
+    private static MethodHandle INDY_call34 () throws Throwable {
+        if (INDY_call34 != null)
+            return INDY_call34;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call35;
+    private static MethodHandle INDY_call35 () throws Throwable {
+        if (INDY_call35 != null)
+            return INDY_call35;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call36;
+    private static MethodHandle INDY_call36 () throws Throwable {
+        if (INDY_call36 != null)
+            return INDY_call36;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call37;
+    private static MethodHandle INDY_call37 () throws Throwable {
+        if (INDY_call37 != null)
+            return INDY_call37;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call38;
+    private static MethodHandle INDY_call38 () throws Throwable {
+        if (INDY_call38 != null)
+            return INDY_call38;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call39;
+    private static MethodHandle INDY_call39 () throws Throwable {
+        if (INDY_call39 != null)
+            return INDY_call39;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call40;
+    private static MethodHandle INDY_call40 () throws Throwable {
+        if (INDY_call40 != null)
+            return INDY_call40;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call41;
+    private static MethodHandle INDY_call41 () throws Throwable {
+        if (INDY_call41 != null)
+            return INDY_call41;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call42;
+    private static MethodHandle INDY_call42 () throws Throwable {
+        if (INDY_call42 != null)
+            return INDY_call42;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call43;
+    private static MethodHandle INDY_call43 () throws Throwable {
+        if (INDY_call43 != null)
+            return INDY_call43;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call44;
+    private static MethodHandle INDY_call44 () throws Throwable {
+        if (INDY_call44 != null)
+            return INDY_call44;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call45;
+    private static MethodHandle INDY_call45 () throws Throwable {
+        if (INDY_call45 != null)
+            return INDY_call45;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call46;
+    private static MethodHandle INDY_call46 () throws Throwable {
+        if (INDY_call46 != null)
+            return INDY_call46;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call47;
+    private static MethodHandle INDY_call47 () throws Throwable {
+        if (INDY_call47 != null)
+            return INDY_call47;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call48;
+    private static MethodHandle INDY_call48 () throws Throwable {
+        if (INDY_call48 != null)
+            return INDY_call48;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call49;
+    private static MethodHandle INDY_call49 () throws Throwable {
+        if (INDY_call49 != null)
+            return INDY_call49;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call50;
+    private static MethodHandle INDY_call50 () throws Throwable {
+        if (INDY_call50 != null)
+            return INDY_call50;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call51;
+    private static MethodHandle INDY_call51 () throws Throwable {
+        if (INDY_call51 != null)
+            return INDY_call51;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call52;
+    private static MethodHandle INDY_call52 () throws Throwable {
+        if (INDY_call52 != null)
+            return INDY_call52;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call53;
+    private static MethodHandle INDY_call53 () throws Throwable {
+        if (INDY_call53 != null)
+            return INDY_call53;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call54;
+    private static MethodHandle INDY_call54 () throws Throwable {
+        if (INDY_call54 != null)
+            return INDY_call54;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call55;
+    private static MethodHandle INDY_call55 () throws Throwable {
+        if (INDY_call55 != null)
+            return INDY_call55;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call56;
+    private static MethodHandle INDY_call56 () throws Throwable {
+        if (INDY_call56 != null)
+            return INDY_call56;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call57;
+    private static MethodHandle INDY_call57 () throws Throwable {
+        if (INDY_call57 != null)
+            return INDY_call57;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call58;
+    private static MethodHandle INDY_call58 () throws Throwable {
+        if (INDY_call58 != null)
+            return INDY_call58;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call59;
+    private static MethodHandle INDY_call59 () throws Throwable {
+        if (INDY_call59 != null)
+            return INDY_call59;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call60;
+    private static MethodHandle INDY_call60 () throws Throwable {
+        if (INDY_call60 != null)
+            return INDY_call60;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call61;
+    private static MethodHandle INDY_call61 () throws Throwable {
+        if (INDY_call61 != null)
+            return INDY_call61;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call62;
+    private static MethodHandle INDY_call62 () throws Throwable {
+        if (INDY_call62 != null)
+            return INDY_call62;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call63;
+    private static MethodHandle INDY_call63 () throws Throwable {
+        if (INDY_call63 != null)
+            return INDY_call63;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call64;
+    private static MethodHandle INDY_call64 () throws Throwable {
+        if (INDY_call64 != null)
+            return INDY_call64;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call65;
+    private static MethodHandle INDY_call65 () throws Throwable {
+        if (INDY_call65 != null)
+            return INDY_call65;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call66;
+    private static MethodHandle INDY_call66 () throws Throwable {
+        if (INDY_call66 != null)
+            return INDY_call66;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call67;
+    private static MethodHandle INDY_call67 () throws Throwable {
+        if (INDY_call67 != null)
+            return INDY_call67;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call68;
+    private static MethodHandle INDY_call68 () throws Throwable {
+        if (INDY_call68 != null)
+            return INDY_call68;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call69;
+    private static MethodHandle INDY_call69 () throws Throwable {
+        if (INDY_call69 != null)
+            return INDY_call69;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call70;
+    private static MethodHandle INDY_call70 () throws Throwable {
+        if (INDY_call70 != null)
+            return INDY_call70;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call71;
+    private static MethodHandle INDY_call71 () throws Throwable {
+        if (INDY_call71 != null)
+            return INDY_call71;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call72;
+    private static MethodHandle INDY_call72 () throws Throwable {
+        if (INDY_call72 != null)
+            return INDY_call72;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call73;
+    private static MethodHandle INDY_call73 () throws Throwable {
+        if (INDY_call73 != null)
+            return INDY_call73;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call74;
+    private static MethodHandle INDY_call74 () throws Throwable {
+        if (INDY_call74 != null)
+            return INDY_call74;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call75;
+    private static MethodHandle INDY_call75 () throws Throwable {
+        if (INDY_call75 != null)
+            return INDY_call75;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call76;
+    private static MethodHandle INDY_call76 () throws Throwable {
+        if (INDY_call76 != null)
+            return INDY_call76;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call77;
+    private static MethodHandle INDY_call77 () throws Throwable {
+        if (INDY_call77 != null)
+            return INDY_call77;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call78;
+    private static MethodHandle INDY_call78 () throws Throwable {
+        if (INDY_call78 != null)
+            return INDY_call78;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call79;
+    private static MethodHandle INDY_call79 () throws Throwable {
+        if (INDY_call79 != null)
+            return INDY_call79;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call80;
+    private static MethodHandle INDY_call80 () throws Throwable {
+        if (INDY_call80 != null)
+            return INDY_call80;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call81;
+    private static MethodHandle INDY_call81 () throws Throwable {
+        if (INDY_call81 != null)
+            return INDY_call81;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call82;
+    private static MethodHandle INDY_call82 () throws Throwable {
+        if (INDY_call82 != null)
+            return INDY_call82;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call83;
+    private static MethodHandle INDY_call83 () throws Throwable {
+        if (INDY_call83 != null)
+            return INDY_call83;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call84;
+    private static MethodHandle INDY_call84 () throws Throwable {
+        if (INDY_call84 != null)
+            return INDY_call84;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call85;
+    private static MethodHandle INDY_call85 () throws Throwable {
+        if (INDY_call85 != null)
+            return INDY_call85;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call86;
+    private static MethodHandle INDY_call86 () throws Throwable {
+        if (INDY_call86 != null)
+            return INDY_call86;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call87;
+    private static MethodHandle INDY_call87 () throws Throwable {
+        if (INDY_call87 != null)
+            return INDY_call87;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call88;
+    private static MethodHandle INDY_call88 () throws Throwable {
+        if (INDY_call88 != null)
+            return INDY_call88;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call89;
+    private static MethodHandle INDY_call89 () throws Throwable {
+        if (INDY_call89 != null)
+            return INDY_call89;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call90;
+    private static MethodHandle INDY_call90 () throws Throwable {
+        if (INDY_call90 != null)
+            return INDY_call90;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call91;
+    private static MethodHandle INDY_call91 () throws Throwable {
+        if (INDY_call91 != null)
+            return INDY_call91;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call92;
+    private static MethodHandle INDY_call92 () throws Throwable {
+        if (INDY_call92 != null)
+            return INDY_call92;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call93;
+    private static MethodHandle INDY_call93 () throws Throwable {
+        if (INDY_call93 != null)
+            return INDY_call93;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call94;
+    private static MethodHandle INDY_call94 () throws Throwable {
+        if (INDY_call94 != null)
+            return INDY_call94;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call95;
+    private static MethodHandle INDY_call95 () throws Throwable {
+        if (INDY_call95 != null)
+            return INDY_call95;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call96;
+    private static MethodHandle INDY_call96 () throws Throwable {
+        if (INDY_call96 != null)
+            return INDY_call96;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call97;
+    private static MethodHandle INDY_call97 () throws Throwable {
+        if (INDY_call97 != null)
+            return INDY_call97;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call98;
+    private static MethodHandle INDY_call98 () throws Throwable {
+        if (INDY_call98 != null)
+            return INDY_call98;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call99;
+    private static MethodHandle INDY_call99 () throws Throwable {
+        if (INDY_call99 != null)
+            return INDY_call99;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call100;
+    private static MethodHandle INDY_call100 () throws Throwable {
+        if (INDY_call100 != null)
+            return INDY_call100;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call101;
+    private static MethodHandle INDY_call101 () throws Throwable {
+        if (INDY_call101 != null)
+            return INDY_call101;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call102;
+    private static MethodHandle INDY_call102 () throws Throwable {
+        if (INDY_call102 != null)
+            return INDY_call102;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call103;
+    private static MethodHandle INDY_call103 () throws Throwable {
+        if (INDY_call103 != null)
+            return INDY_call103;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call104;
+    private static MethodHandle INDY_call104 () throws Throwable {
+        if (INDY_call104 != null)
+            return INDY_call104;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call105;
+    private static MethodHandle INDY_call105 () throws Throwable {
+        if (INDY_call105 != null)
+            return INDY_call105;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call106;
+    private static MethodHandle INDY_call106 () throws Throwable {
+        if (INDY_call106 != null)
+            return INDY_call106;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call107;
+    private static MethodHandle INDY_call107 () throws Throwable {
+        if (INDY_call107 != null)
+            return INDY_call107;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call108;
+    private static MethodHandle INDY_call108 () throws Throwable {
+        if (INDY_call108 != null)
+            return INDY_call108;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call109;
+    private static MethodHandle INDY_call109 () throws Throwable {
+        if (INDY_call109 != null)
+            return INDY_call109;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call110;
+    private static MethodHandle INDY_call110 () throws Throwable {
+        if (INDY_call110 != null)
+            return INDY_call110;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call111;
+    private static MethodHandle INDY_call111 () throws Throwable {
+        if (INDY_call111 != null)
+            return INDY_call111;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call112;
+    private static MethodHandle INDY_call112 () throws Throwable {
+        if (INDY_call112 != null)
+            return INDY_call112;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call113;
+    private static MethodHandle INDY_call113 () throws Throwable {
+        if (INDY_call113 != null)
+            return INDY_call113;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call114;
+    private static MethodHandle INDY_call114 () throws Throwable {
+        if (INDY_call114 != null)
+            return INDY_call114;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call115;
+    private static MethodHandle INDY_call115 () throws Throwable {
+        if (INDY_call115 != null)
+            return INDY_call115;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call116;
+    private static MethodHandle INDY_call116 () throws Throwable {
+        if (INDY_call116 != null)
+            return INDY_call116;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call117;
+    private static MethodHandle INDY_call117 () throws Throwable {
+        if (INDY_call117 != null)
+            return INDY_call117;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call118;
+    private static MethodHandle INDY_call118 () throws Throwable {
+        if (INDY_call118 != null)
+            return INDY_call118;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call119;
+    private static MethodHandle INDY_call119 () throws Throwable {
+        if (INDY_call119 != null)
+            return INDY_call119;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call120;
+    private static MethodHandle INDY_call120 () throws Throwable {
+        if (INDY_call120 != null)
+            return INDY_call120;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call121;
+    private static MethodHandle INDY_call121 () throws Throwable {
+        if (INDY_call121 != null)
+            return INDY_call121;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call122;
+    private static MethodHandle INDY_call122 () throws Throwable {
+        if (INDY_call122 != null)
+            return INDY_call122;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call123;
+    private static MethodHandle INDY_call123 () throws Throwable {
+        if (INDY_call123 != null)
+            return INDY_call123;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call124;
+    private static MethodHandle INDY_call124 () throws Throwable {
+        if (INDY_call124 != null)
+            return INDY_call124;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call125;
+    private static MethodHandle INDY_call125 () throws Throwable {
+        if (INDY_call125 != null)
+            return INDY_call125;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call126;
+    private static MethodHandle INDY_call126 () throws Throwable {
+        if (INDY_call126 != null)
+            return INDY_call126;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call127;
+    private static MethodHandle INDY_call127 () throws Throwable {
+        if (INDY_call127 != null)
+            return INDY_call127;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call128;
+    private static MethodHandle INDY_call128 () throws Throwable {
+        if (INDY_call128 != null)
+            return INDY_call128;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call129;
+    private static MethodHandle INDY_call129 () throws Throwable {
+        if (INDY_call129 != null)
+            return INDY_call129;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call130;
+    private static MethodHandle INDY_call130 () throws Throwable {
+        if (INDY_call130 != null)
+            return INDY_call130;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call131;
+    private static MethodHandle INDY_call131 () throws Throwable {
+        if (INDY_call131 != null)
+            return INDY_call131;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call132;
+    private static MethodHandle INDY_call132 () throws Throwable {
+        if (INDY_call132 != null)
+            return INDY_call132;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call133;
+    private static MethodHandle INDY_call133 () throws Throwable {
+        if (INDY_call133 != null)
+            return INDY_call133;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call134;
+    private static MethodHandle INDY_call134 () throws Throwable {
+        if (INDY_call134 != null)
+            return INDY_call134;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call135;
+    private static MethodHandle INDY_call135 () throws Throwable {
+        if (INDY_call135 != null)
+            return INDY_call135;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call136;
+    private static MethodHandle INDY_call136 () throws Throwable {
+        if (INDY_call136 != null)
+            return INDY_call136;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call137;
+    private static MethodHandle INDY_call137 () throws Throwable {
+        if (INDY_call137 != null)
+            return INDY_call137;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call138;
+    private static MethodHandle INDY_call138 () throws Throwable {
+        if (INDY_call138 != null)
+            return INDY_call138;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call139;
+    private static MethodHandle INDY_call139 () throws Throwable {
+        if (INDY_call139 != null)
+            return INDY_call139;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call140;
+    private static MethodHandle INDY_call140 () throws Throwable {
+        if (INDY_call140 != null)
+            return INDY_call140;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call141;
+    private static MethodHandle INDY_call141 () throws Throwable {
+        if (INDY_call141 != null)
+            return INDY_call141;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call142;
+    private static MethodHandle INDY_call142 () throws Throwable {
+        if (INDY_call142 != null)
+            return INDY_call142;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call143;
+    private static MethodHandle INDY_call143 () throws Throwable {
+        if (INDY_call143 != null)
+            return INDY_call143;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call144;
+    private static MethodHandle INDY_call144 () throws Throwable {
+        if (INDY_call144 != null)
+            return INDY_call144;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call145;
+    private static MethodHandle INDY_call145 () throws Throwable {
+        if (INDY_call145 != null)
+            return INDY_call145;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call146;
+    private static MethodHandle INDY_call146 () throws Throwable {
+        if (INDY_call146 != null)
+            return INDY_call146;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call147;
+    private static MethodHandle INDY_call147 () throws Throwable {
+        if (INDY_call147 != null)
+            return INDY_call147;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call148;
+    private static MethodHandle INDY_call148 () throws Throwable {
+        if (INDY_call148 != null)
+            return INDY_call148;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call149;
+    private static MethodHandle INDY_call149 () throws Throwable {
+        if (INDY_call149 != null)
+            return INDY_call149;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call150;
+    private static MethodHandle INDY_call150 () throws Throwable {
+        if (INDY_call150 != null)
+            return INDY_call150;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call151;
+    private static MethodHandle INDY_call151 () throws Throwable {
+        if (INDY_call151 != null)
+            return INDY_call151;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call152;
+    private static MethodHandle INDY_call152 () throws Throwable {
+        if (INDY_call152 != null)
+            return INDY_call152;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call153;
+    private static MethodHandle INDY_call153 () throws Throwable {
+        if (INDY_call153 != null)
+            return INDY_call153;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call154;
+    private static MethodHandle INDY_call154 () throws Throwable {
+        if (INDY_call154 != null)
+            return INDY_call154;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call155;
+    private static MethodHandle INDY_call155 () throws Throwable {
+        if (INDY_call155 != null)
+            return INDY_call155;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call156;
+    private static MethodHandle INDY_call156 () throws Throwable {
+        if (INDY_call156 != null)
+            return INDY_call156;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call157;
+    private static MethodHandle INDY_call157 () throws Throwable {
+        if (INDY_call157 != null)
+            return INDY_call157;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call158;
+    private static MethodHandle INDY_call158 () throws Throwable {
+        if (INDY_call158 != null)
+            return INDY_call158;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call159;
+    private static MethodHandle INDY_call159 () throws Throwable {
+        if (INDY_call159 != null)
+            return INDY_call159;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call160;
+    private static MethodHandle INDY_call160 () throws Throwable {
+        if (INDY_call160 != null)
+            return INDY_call160;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call161;
+    private static MethodHandle INDY_call161 () throws Throwable {
+        if (INDY_call161 != null)
+            return INDY_call161;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call162;
+    private static MethodHandle INDY_call162 () throws Throwable {
+        if (INDY_call162 != null)
+            return INDY_call162;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call163;
+    private static MethodHandle INDY_call163 () throws Throwable {
+        if (INDY_call163 != null)
+            return INDY_call163;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call164;
+    private static MethodHandle INDY_call164 () throws Throwable {
+        if (INDY_call164 != null)
+            return INDY_call164;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call165;
+    private static MethodHandle INDY_call165 () throws Throwable {
+        if (INDY_call165 != null)
+            return INDY_call165;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call166;
+    private static MethodHandle INDY_call166 () throws Throwable {
+        if (INDY_call166 != null)
+            return INDY_call166;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call167;
+    private static MethodHandle INDY_call167 () throws Throwable {
+        if (INDY_call167 != null)
+            return INDY_call167;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call168;
+    private static MethodHandle INDY_call168 () throws Throwable {
+        if (INDY_call168 != null)
+            return INDY_call168;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call169;
+    private static MethodHandle INDY_call169 () throws Throwable {
+        if (INDY_call169 != null)
+            return INDY_call169;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call170;
+    private static MethodHandle INDY_call170 () throws Throwable {
+        if (INDY_call170 != null)
+            return INDY_call170;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call171;
+    private static MethodHandle INDY_call171 () throws Throwable {
+        if (INDY_call171 != null)
+            return INDY_call171;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call172;
+    private static MethodHandle INDY_call172 () throws Throwable {
+        if (INDY_call172 != null)
+            return INDY_call172;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call173;
+    private static MethodHandle INDY_call173 () throws Throwable {
+        if (INDY_call173 != null)
+            return INDY_call173;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call174;
+    private static MethodHandle INDY_call174 () throws Throwable {
+        if (INDY_call174 != null)
+            return INDY_call174;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call175;
+    private static MethodHandle INDY_call175 () throws Throwable {
+        if (INDY_call175 != null)
+            return INDY_call175;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call176;
+    private static MethodHandle INDY_call176 () throws Throwable {
+        if (INDY_call176 != null)
+            return INDY_call176;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call177;
+    private static MethodHandle INDY_call177 () throws Throwable {
+        if (INDY_call177 != null)
+            return INDY_call177;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call178;
+    private static MethodHandle INDY_call178 () throws Throwable {
+        if (INDY_call178 != null)
+            return INDY_call178;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call179;
+    private static MethodHandle INDY_call179 () throws Throwable {
+        if (INDY_call179 != null)
+            return INDY_call179;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call180;
+    private static MethodHandle INDY_call180 () throws Throwable {
+        if (INDY_call180 != null)
+            return INDY_call180;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call181;
+    private static MethodHandle INDY_call181 () throws Throwable {
+        if (INDY_call181 != null)
+            return INDY_call181;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call182;
+    private static MethodHandle INDY_call182 () throws Throwable {
+        if (INDY_call182 != null)
+            return INDY_call182;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call183;
+    private static MethodHandle INDY_call183 () throws Throwable {
+        if (INDY_call183 != null)
+            return INDY_call183;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call184;
+    private static MethodHandle INDY_call184 () throws Throwable {
+        if (INDY_call184 != null)
+            return INDY_call184;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call185;
+    private static MethodHandle INDY_call185 () throws Throwable {
+        if (INDY_call185 != null)
+            return INDY_call185;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call186;
+    private static MethodHandle INDY_call186 () throws Throwable {
+        if (INDY_call186 != null)
+            return INDY_call186;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call187;
+    private static MethodHandle INDY_call187 () throws Throwable {
+        if (INDY_call187 != null)
+            return INDY_call187;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call188;
+    private static MethodHandle INDY_call188 () throws Throwable {
+        if (INDY_call188 != null)
+            return INDY_call188;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call189;
+    private static MethodHandle INDY_call189 () throws Throwable {
+        if (INDY_call189 != null)
+            return INDY_call189;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call190;
+    private static MethodHandle INDY_call190 () throws Throwable {
+        if (INDY_call190 != null)
+            return INDY_call190;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call191;
+    private static MethodHandle INDY_call191 () throws Throwable {
+        if (INDY_call191 != null)
+            return INDY_call191;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call192;
+    private static MethodHandle INDY_call192 () throws Throwable {
+        if (INDY_call192 != null)
+            return INDY_call192;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call193;
+    private static MethodHandle INDY_call193 () throws Throwable {
+        if (INDY_call193 != null)
+            return INDY_call193;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call194;
+    private static MethodHandle INDY_call194 () throws Throwable {
+        if (INDY_call194 != null)
+            return INDY_call194;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call195;
+    private static MethodHandle INDY_call195 () throws Throwable {
+        if (INDY_call195 != null)
+            return INDY_call195;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call196;
+    private static MethodHandle INDY_call196 () throws Throwable {
+        if (INDY_call196 != null)
+            return INDY_call196;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call197;
+    private static MethodHandle INDY_call197 () throws Throwable {
+        if (INDY_call197 != null)
+            return INDY_call197;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call198;
+    private static MethodHandle INDY_call198 () throws Throwable {
+        if (INDY_call198 != null)
+            return INDY_call198;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call199;
+    private static MethodHandle INDY_call199 () throws Throwable {
+        if (INDY_call199 != null)
+            return INDY_call199;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call200;
+    private static MethodHandle INDY_call200 () throws Throwable {
+        if (INDY_call200 != null)
+            return INDY_call200;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call201;
+    private static MethodHandle INDY_call201 () throws Throwable {
+        if (INDY_call201 != null)
+            return INDY_call201;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call202;
+    private static MethodHandle INDY_call202 () throws Throwable {
+        if (INDY_call202 != null)
+            return INDY_call202;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call203;
+    private static MethodHandle INDY_call203 () throws Throwable {
+        if (INDY_call203 != null)
+            return INDY_call203;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call204;
+    private static MethodHandle INDY_call204 () throws Throwable {
+        if (INDY_call204 != null)
+            return INDY_call204;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call205;
+    private static MethodHandle INDY_call205 () throws Throwable {
+        if (INDY_call205 != null)
+            return INDY_call205;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call206;
+    private static MethodHandle INDY_call206 () throws Throwable {
+        if (INDY_call206 != null)
+            return INDY_call206;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call207;
+    private static MethodHandle INDY_call207 () throws Throwable {
+        if (INDY_call207 != null)
+            return INDY_call207;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call208;
+    private static MethodHandle INDY_call208 () throws Throwable {
+        if (INDY_call208 != null)
+            return INDY_call208;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call209;
+    private static MethodHandle INDY_call209 () throws Throwable {
+        if (INDY_call209 != null)
+            return INDY_call209;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call210;
+    private static MethodHandle INDY_call210 () throws Throwable {
+        if (INDY_call210 != null)
+            return INDY_call210;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call211;
+    private static MethodHandle INDY_call211 () throws Throwable {
+        if (INDY_call211 != null)
+            return INDY_call211;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call212;
+    private static MethodHandle INDY_call212 () throws Throwable {
+        if (INDY_call212 != null)
+            return INDY_call212;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call213;
+    private static MethodHandle INDY_call213 () throws Throwable {
+        if (INDY_call213 != null)
+            return INDY_call213;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call214;
+    private static MethodHandle INDY_call214 () throws Throwable {
+        if (INDY_call214 != null)
+            return INDY_call214;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call215;
+    private static MethodHandle INDY_call215 () throws Throwable {
+        if (INDY_call215 != null)
+            return INDY_call215;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call216;
+    private static MethodHandle INDY_call216 () throws Throwable {
+        if (INDY_call216 != null)
+            return INDY_call216;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call217;
+    private static MethodHandle INDY_call217 () throws Throwable {
+        if (INDY_call217 != null)
+            return INDY_call217;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call218;
+    private static MethodHandle INDY_call218 () throws Throwable {
+        if (INDY_call218 != null)
+            return INDY_call218;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call219;
+    private static MethodHandle INDY_call219 () throws Throwable {
+        if (INDY_call219 != null)
+            return INDY_call219;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call220;
+    private static MethodHandle INDY_call220 () throws Throwable {
+        if (INDY_call220 != null)
+            return INDY_call220;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call221;
+    private static MethodHandle INDY_call221 () throws Throwable {
+        if (INDY_call221 != null)
+            return INDY_call221;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call222;
+    private static MethodHandle INDY_call222 () throws Throwable {
+        if (INDY_call222 != null)
+            return INDY_call222;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call223;
+    private static MethodHandle INDY_call223 () throws Throwable {
+        if (INDY_call223 != null)
+            return INDY_call223;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call224;
+    private static MethodHandle INDY_call224 () throws Throwable {
+        if (INDY_call224 != null)
+            return INDY_call224;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call225;
+    private static MethodHandle INDY_call225 () throws Throwable {
+        if (INDY_call225 != null)
+            return INDY_call225;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call226;
+    private static MethodHandle INDY_call226 () throws Throwable {
+        if (INDY_call226 != null)
+            return INDY_call226;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call227;
+    private static MethodHandle INDY_call227 () throws Throwable {
+        if (INDY_call227 != null)
+            return INDY_call227;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call228;
+    private static MethodHandle INDY_call228 () throws Throwable {
+        if (INDY_call228 != null)
+            return INDY_call228;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call229;
+    private static MethodHandle INDY_call229 () throws Throwable {
+        if (INDY_call229 != null)
+            return INDY_call229;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call230;
+    private static MethodHandle INDY_call230 () throws Throwable {
+        if (INDY_call230 != null)
+            return INDY_call230;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call231;
+    private static MethodHandle INDY_call231 () throws Throwable {
+        if (INDY_call231 != null)
+            return INDY_call231;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call232;
+    private static MethodHandle INDY_call232 () throws Throwable {
+        if (INDY_call232 != null)
+            return INDY_call232;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call233;
+    private static MethodHandle INDY_call233 () throws Throwable {
+        if (INDY_call233 != null)
+            return INDY_call233;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call234;
+    private static MethodHandle INDY_call234 () throws Throwable {
+        if (INDY_call234 != null)
+            return INDY_call234;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call235;
+    private static MethodHandle INDY_call235 () throws Throwable {
+        if (INDY_call235 != null)
+            return INDY_call235;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call236;
+    private static MethodHandle INDY_call236 () throws Throwable {
+        if (INDY_call236 != null)
+            return INDY_call236;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call237;
+    private static MethodHandle INDY_call237 () throws Throwable {
+        if (INDY_call237 != null)
+            return INDY_call237;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call238;
+    private static MethodHandle INDY_call238 () throws Throwable {
+        if (INDY_call238 != null)
+            return INDY_call238;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call239;
+    private static MethodHandle INDY_call239 () throws Throwable {
+        if (INDY_call239 != null)
+            return INDY_call239;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call240;
+    private static MethodHandle INDY_call240 () throws Throwable {
+        if (INDY_call240 != null)
+            return INDY_call240;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call241;
+    private static MethodHandle INDY_call241 () throws Throwable {
+        if (INDY_call241 != null)
+            return INDY_call241;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call242;
+    private static MethodHandle INDY_call242 () throws Throwable {
+        if (INDY_call242 != null)
+            return INDY_call242;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call243;
+    private static MethodHandle INDY_call243 () throws Throwable {
+        if (INDY_call243 != null)
+            return INDY_call243;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call244;
+    private static MethodHandle INDY_call244 () throws Throwable {
+        if (INDY_call244 != null)
+            return INDY_call244;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call245;
+    private static MethodHandle INDY_call245 () throws Throwable {
+        if (INDY_call245 != null)
+            return INDY_call245;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call246;
+    private static MethodHandle INDY_call246 () throws Throwable {
+        if (INDY_call246 != null)
+            return INDY_call246;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call247;
+    private static MethodHandle INDY_call247 () throws Throwable {
+        if (INDY_call247 != null)
+            return INDY_call247;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call248;
+    private static MethodHandle INDY_call248 () throws Throwable {
+        if (INDY_call248 != null)
+            return INDY_call248;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call249;
+    private static MethodHandle INDY_call249 () throws Throwable {
+        if (INDY_call249 != null)
+            return INDY_call249;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call250;
+    private static MethodHandle INDY_call250 () throws Throwable {
+        if (INDY_call250 != null)
+            return INDY_call250;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call251;
+    private static MethodHandle INDY_call251 () throws Throwable {
+        if (INDY_call251 != null)
+            return INDY_call251;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call252;
+    private static MethodHandle INDY_call252 () throws Throwable {
+        if (INDY_call252 != null)
+            return INDY_call252;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call253;
+    private static MethodHandle INDY_call253 () throws Throwable {
+        if (INDY_call253 != null)
+            return INDY_call253;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call254;
+    private static MethodHandle INDY_call254 () throws Throwable {
+        if (INDY_call254 != null)
+            return INDY_call254;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call255;
+    private static MethodHandle INDY_call255 () throws Throwable {
+        if (INDY_call255 != null)
+            return INDY_call255;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call256;
+    private static MethodHandle INDY_call256 () throws Throwable {
+        if (INDY_call256 != null)
+            return INDY_call256;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call257;
+    private static MethodHandle INDY_call257 () throws Throwable {
+        if (INDY_call257 != null)
+            return INDY_call257;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call258;
+    private static MethodHandle INDY_call258 () throws Throwable {
+        if (INDY_call258 != null)
+            return INDY_call258;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call259;
+    private static MethodHandle INDY_call259 () throws Throwable {
+        if (INDY_call259 != null)
+            return INDY_call259;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call260;
+    private static MethodHandle INDY_call260 () throws Throwable {
+        if (INDY_call260 != null)
+            return INDY_call260;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call261;
+    private static MethodHandle INDY_call261 () throws Throwable {
+        if (INDY_call261 != null)
+            return INDY_call261;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call262;
+    private static MethodHandle INDY_call262 () throws Throwable {
+        if (INDY_call262 != null)
+            return INDY_call262;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call263;
+    private static MethodHandle INDY_call263 () throws Throwable {
+        if (INDY_call263 != null)
+            return INDY_call263;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call264;
+    private static MethodHandle INDY_call264 () throws Throwable {
+        if (INDY_call264 != null)
+            return INDY_call264;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call265;
+    private static MethodHandle INDY_call265 () throws Throwable {
+        if (INDY_call265 != null)
+            return INDY_call265;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call266;
+    private static MethodHandle INDY_call266 () throws Throwable {
+        if (INDY_call266 != null)
+            return INDY_call266;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call267;
+    private static MethodHandle INDY_call267 () throws Throwable {
+        if (INDY_call267 != null)
+            return INDY_call267;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call268;
+    private static MethodHandle INDY_call268 () throws Throwable {
+        if (INDY_call268 != null)
+            return INDY_call268;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call269;
+    private static MethodHandle INDY_call269 () throws Throwable {
+        if (INDY_call269 != null)
+            return INDY_call269;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call270;
+    private static MethodHandle INDY_call270 () throws Throwable {
+        if (INDY_call270 != null)
+            return INDY_call270;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call271;
+    private static MethodHandle INDY_call271 () throws Throwable {
+        if (INDY_call271 != null)
+            return INDY_call271;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call272;
+    private static MethodHandle INDY_call272 () throws Throwable {
+        if (INDY_call272 != null)
+            return INDY_call272;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call273;
+    private static MethodHandle INDY_call273 () throws Throwable {
+        if (INDY_call273 != null)
+            return INDY_call273;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call274;
+    private static MethodHandle INDY_call274 () throws Throwable {
+        if (INDY_call274 != null)
+            return INDY_call274;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call275;
+    private static MethodHandle INDY_call275 () throws Throwable {
+        if (INDY_call275 != null)
+            return INDY_call275;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call276;
+    private static MethodHandle INDY_call276 () throws Throwable {
+        if (INDY_call276 != null)
+            return INDY_call276;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call277;
+    private static MethodHandle INDY_call277 () throws Throwable {
+        if (INDY_call277 != null)
+            return INDY_call277;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call278;
+    private static MethodHandle INDY_call278 () throws Throwable {
+        if (INDY_call278 != null)
+            return INDY_call278;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call279;
+    private static MethodHandle INDY_call279 () throws Throwable {
+        if (INDY_call279 != null)
+            return INDY_call279;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call280;
+    private static MethodHandle INDY_call280 () throws Throwable {
+        if (INDY_call280 != null)
+            return INDY_call280;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call281;
+    private static MethodHandle INDY_call281 () throws Throwable {
+        if (INDY_call281 != null)
+            return INDY_call281;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call282;
+    private static MethodHandle INDY_call282 () throws Throwable {
+        if (INDY_call282 != null)
+            return INDY_call282;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call283;
+    private static MethodHandle INDY_call283 () throws Throwable {
+        if (INDY_call283 != null)
+            return INDY_call283;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call284;
+    private static MethodHandle INDY_call284 () throws Throwable {
+        if (INDY_call284 != null)
+            return INDY_call284;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call285;
+    private static MethodHandle INDY_call285 () throws Throwable {
+        if (INDY_call285 != null)
+            return INDY_call285;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call286;
+    private static MethodHandle INDY_call286 () throws Throwable {
+        if (INDY_call286 != null)
+            return INDY_call286;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call287;
+    private static MethodHandle INDY_call287 () throws Throwable {
+        if (INDY_call287 != null)
+            return INDY_call287;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call288;
+    private static MethodHandle INDY_call288 () throws Throwable {
+        if (INDY_call288 != null)
+            return INDY_call288;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call289;
+    private static MethodHandle INDY_call289 () throws Throwable {
+        if (INDY_call289 != null)
+            return INDY_call289;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call290;
+    private static MethodHandle INDY_call290 () throws Throwable {
+        if (INDY_call290 != null)
+            return INDY_call290;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call291;
+    private static MethodHandle INDY_call291 () throws Throwable {
+        if (INDY_call291 != null)
+            return INDY_call291;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call292;
+    private static MethodHandle INDY_call292 () throws Throwable {
+        if (INDY_call292 != null)
+            return INDY_call292;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call293;
+    private static MethodHandle INDY_call293 () throws Throwable {
+        if (INDY_call293 != null)
+            return INDY_call293;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call294;
+    private static MethodHandle INDY_call294 () throws Throwable {
+        if (INDY_call294 != null)
+            return INDY_call294;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call295;
+    private static MethodHandle INDY_call295 () throws Throwable {
+        if (INDY_call295 != null)
+            return INDY_call295;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call296;
+    private static MethodHandle INDY_call296 () throws Throwable {
+        if (INDY_call296 != null)
+            return INDY_call296;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call297;
+    private static MethodHandle INDY_call297 () throws Throwable {
+        if (INDY_call297 != null)
+            return INDY_call297;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call298;
+    private static MethodHandle INDY_call298 () throws Throwable {
+        if (INDY_call298 != null)
+            return INDY_call298;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call299;
+    private static MethodHandle INDY_call299 () throws Throwable {
+        if (INDY_call299 != null)
+            return INDY_call299;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call300;
+    private static MethodHandle INDY_call300 () throws Throwable {
+        if (INDY_call300 != null)
+            return INDY_call300;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call301;
+    private static MethodHandle INDY_call301 () throws Throwable {
+        if (INDY_call301 != null)
+            return INDY_call301;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call302;
+    private static MethodHandle INDY_call302 () throws Throwable {
+        if (INDY_call302 != null)
+            return INDY_call302;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call303;
+    private static MethodHandle INDY_call303 () throws Throwable {
+        if (INDY_call303 != null)
+            return INDY_call303;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call304;
+    private static MethodHandle INDY_call304 () throws Throwable {
+        if (INDY_call304 != null)
+            return INDY_call304;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call305;
+    private static MethodHandle INDY_call305 () throws Throwable {
+        if (INDY_call305 != null)
+            return INDY_call305;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call306;
+    private static MethodHandle INDY_call306 () throws Throwable {
+        if (INDY_call306 != null)
+            return INDY_call306;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call307;
+    private static MethodHandle INDY_call307 () throws Throwable {
+        if (INDY_call307 != null)
+            return INDY_call307;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call308;
+    private static MethodHandle INDY_call308 () throws Throwable {
+        if (INDY_call308 != null)
+            return INDY_call308;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call309;
+    private static MethodHandle INDY_call309 () throws Throwable {
+        if (INDY_call309 != null)
+            return INDY_call309;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call310;
+    private static MethodHandle INDY_call310 () throws Throwable {
+        if (INDY_call310 != null)
+            return INDY_call310;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call311;
+    private static MethodHandle INDY_call311 () throws Throwable {
+        if (INDY_call311 != null)
+            return INDY_call311;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call312;
+    private static MethodHandle INDY_call312 () throws Throwable {
+        if (INDY_call312 != null)
+            return INDY_call312;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call313;
+    private static MethodHandle INDY_call313 () throws Throwable {
+        if (INDY_call313 != null)
+            return INDY_call313;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call314;
+    private static MethodHandle INDY_call314 () throws Throwable {
+        if (INDY_call314 != null)
+            return INDY_call314;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call315;
+    private static MethodHandle INDY_call315 () throws Throwable {
+        if (INDY_call315 != null)
+            return INDY_call315;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call316;
+    private static MethodHandle INDY_call316 () throws Throwable {
+        if (INDY_call316 != null)
+            return INDY_call316;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call317;
+    private static MethodHandle INDY_call317 () throws Throwable {
+        if (INDY_call317 != null)
+            return INDY_call317;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call318;
+    private static MethodHandle INDY_call318 () throws Throwable {
+        if (INDY_call318 != null)
+            return INDY_call318;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call319;
+    private static MethodHandle INDY_call319 () throws Throwable {
+        if (INDY_call319 != null)
+            return INDY_call319;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call320;
+    private static MethodHandle INDY_call320 () throws Throwable {
+        if (INDY_call320 != null)
+            return INDY_call320;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call321;
+    private static MethodHandle INDY_call321 () throws Throwable {
+        if (INDY_call321 != null)
+            return INDY_call321;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call322;
+    private static MethodHandle INDY_call322 () throws Throwable {
+        if (INDY_call322 != null)
+            return INDY_call322;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call323;
+    private static MethodHandle INDY_call323 () throws Throwable {
+        if (INDY_call323 != null)
+            return INDY_call323;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call324;
+    private static MethodHandle INDY_call324 () throws Throwable {
+        if (INDY_call324 != null)
+            return INDY_call324;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call325;
+    private static MethodHandle INDY_call325 () throws Throwable {
+        if (INDY_call325 != null)
+            return INDY_call325;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call326;
+    private static MethodHandle INDY_call326 () throws Throwable {
+        if (INDY_call326 != null)
+            return INDY_call326;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call327;
+    private static MethodHandle INDY_call327 () throws Throwable {
+        if (INDY_call327 != null)
+            return INDY_call327;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call328;
+    private static MethodHandle INDY_call328 () throws Throwable {
+        if (INDY_call328 != null)
+            return INDY_call328;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call329;
+    private static MethodHandle INDY_call329 () throws Throwable {
+        if (INDY_call329 != null)
+            return INDY_call329;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call330;
+    private static MethodHandle INDY_call330 () throws Throwable {
+        if (INDY_call330 != null)
+            return INDY_call330;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call331;
+    private static MethodHandle INDY_call331 () throws Throwable {
+        if (INDY_call331 != null)
+            return INDY_call331;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call332;
+    private static MethodHandle INDY_call332 () throws Throwable {
+        if (INDY_call332 != null)
+            return INDY_call332;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call333;
+    private static MethodHandle INDY_call333 () throws Throwable {
+        if (INDY_call333 != null)
+            return INDY_call333;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call334;
+    private static MethodHandle INDY_call334 () throws Throwable {
+        if (INDY_call334 != null)
+            return INDY_call334;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call335;
+    private static MethodHandle INDY_call335 () throws Throwable {
+        if (INDY_call335 != null)
+            return INDY_call335;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call336;
+    private static MethodHandle INDY_call336 () throws Throwable {
+        if (INDY_call336 != null)
+            return INDY_call336;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call337;
+    private static MethodHandle INDY_call337 () throws Throwable {
+        if (INDY_call337 != null)
+            return INDY_call337;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call338;
+    private static MethodHandle INDY_call338 () throws Throwable {
+        if (INDY_call338 != null)
+            return INDY_call338;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call339;
+    private static MethodHandle INDY_call339 () throws Throwable {
+        if (INDY_call339 != null)
+            return INDY_call339;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call340;
+    private static MethodHandle INDY_call340 () throws Throwable {
+        if (INDY_call340 != null)
+            return INDY_call340;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call341;
+    private static MethodHandle INDY_call341 () throws Throwable {
+        if (INDY_call341 != null)
+            return INDY_call341;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call342;
+    private static MethodHandle INDY_call342 () throws Throwable {
+        if (INDY_call342 != null)
+            return INDY_call342;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call343;
+    private static MethodHandle INDY_call343 () throws Throwable {
+        if (INDY_call343 != null)
+            return INDY_call343;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call344;
+    private static MethodHandle INDY_call344 () throws Throwable {
+        if (INDY_call344 != null)
+            return INDY_call344;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call345;
+    private static MethodHandle INDY_call345 () throws Throwable {
+        if (INDY_call345 != null)
+            return INDY_call345;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call346;
+    private static MethodHandle INDY_call346 () throws Throwable {
+        if (INDY_call346 != null)
+            return INDY_call346;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call347;
+    private static MethodHandle INDY_call347 () throws Throwable {
+        if (INDY_call347 != null)
+            return INDY_call347;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call348;
+    private static MethodHandle INDY_call348 () throws Throwable {
+        if (INDY_call348 != null)
+            return INDY_call348;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call349;
+    private static MethodHandle INDY_call349 () throws Throwable {
+        if (INDY_call349 != null)
+            return INDY_call349;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call350;
+    private static MethodHandle INDY_call350 () throws Throwable {
+        if (INDY_call350 != null)
+            return INDY_call350;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call351;
+    private static MethodHandle INDY_call351 () throws Throwable {
+        if (INDY_call351 != null)
+            return INDY_call351;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call352;
+    private static MethodHandle INDY_call352 () throws Throwable {
+        if (INDY_call352 != null)
+            return INDY_call352;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call353;
+    private static MethodHandle INDY_call353 () throws Throwable {
+        if (INDY_call353 != null)
+            return INDY_call353;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call354;
+    private static MethodHandle INDY_call354 () throws Throwable {
+        if (INDY_call354 != null)
+            return INDY_call354;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call355;
+    private static MethodHandle INDY_call355 () throws Throwable {
+        if (INDY_call355 != null)
+            return INDY_call355;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call356;
+    private static MethodHandle INDY_call356 () throws Throwable {
+        if (INDY_call356 != null)
+            return INDY_call356;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call357;
+    private static MethodHandle INDY_call357 () throws Throwable {
+        if (INDY_call357 != null)
+            return INDY_call357;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call358;
+    private static MethodHandle INDY_call358 () throws Throwable {
+        if (INDY_call358 != null)
+            return INDY_call358;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call359;
+    private static MethodHandle INDY_call359 () throws Throwable {
+        if (INDY_call359 != null)
+            return INDY_call359;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call360;
+    private static MethodHandle INDY_call360 () throws Throwable {
+        if (INDY_call360 != null)
+            return INDY_call360;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call361;
+    private static MethodHandle INDY_call361 () throws Throwable {
+        if (INDY_call361 != null)
+            return INDY_call361;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call362;
+    private static MethodHandle INDY_call362 () throws Throwable {
+        if (INDY_call362 != null)
+            return INDY_call362;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call363;
+    private static MethodHandle INDY_call363 () throws Throwable {
+        if (INDY_call363 != null)
+            return INDY_call363;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call364;
+    private static MethodHandle INDY_call364 () throws Throwable {
+        if (INDY_call364 != null)
+            return INDY_call364;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call365;
+    private static MethodHandle INDY_call365 () throws Throwable {
+        if (INDY_call365 != null)
+            return INDY_call365;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call366;
+    private static MethodHandle INDY_call366 () throws Throwable {
+        if (INDY_call366 != null)
+            return INDY_call366;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call367;
+    private static MethodHandle INDY_call367 () throws Throwable {
+        if (INDY_call367 != null)
+            return INDY_call367;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call368;
+    private static MethodHandle INDY_call368 () throws Throwable {
+        if (INDY_call368 != null)
+            return INDY_call368;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call369;
+    private static MethodHandle INDY_call369 () throws Throwable {
+        if (INDY_call369 != null)
+            return INDY_call369;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call370;
+    private static MethodHandle INDY_call370 () throws Throwable {
+        if (INDY_call370 != null)
+            return INDY_call370;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call371;
+    private static MethodHandle INDY_call371 () throws Throwable {
+        if (INDY_call371 != null)
+            return INDY_call371;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call372;
+    private static MethodHandle INDY_call372 () throws Throwable {
+        if (INDY_call372 != null)
+            return INDY_call372;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call373;
+    private static MethodHandle INDY_call373 () throws Throwable {
+        if (INDY_call373 != null)
+            return INDY_call373;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call374;
+    private static MethodHandle INDY_call374 () throws Throwable {
+        if (INDY_call374 != null)
+            return INDY_call374;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call375;
+    private static MethodHandle INDY_call375 () throws Throwable {
+        if (INDY_call375 != null)
+            return INDY_call375;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call376;
+    private static MethodHandle INDY_call376 () throws Throwable {
+        if (INDY_call376 != null)
+            return INDY_call376;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call377;
+    private static MethodHandle INDY_call377 () throws Throwable {
+        if (INDY_call377 != null)
+            return INDY_call377;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call378;
+    private static MethodHandle INDY_call378 () throws Throwable {
+        if (INDY_call378 != null)
+            return INDY_call378;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call379;
+    private static MethodHandle INDY_call379 () throws Throwable {
+        if (INDY_call379 != null)
+            return INDY_call379;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call380;
+    private static MethodHandle INDY_call380 () throws Throwable {
+        if (INDY_call380 != null)
+            return INDY_call380;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call381;
+    private static MethodHandle INDY_call381 () throws Throwable {
+        if (INDY_call381 != null)
+            return INDY_call381;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call382;
+    private static MethodHandle INDY_call382 () throws Throwable {
+        if (INDY_call382 != null)
+            return INDY_call382;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call383;
+    private static MethodHandle INDY_call383 () throws Throwable {
+        if (INDY_call383 != null)
+            return INDY_call383;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call384;
+    private static MethodHandle INDY_call384 () throws Throwable {
+        if (INDY_call384 != null)
+            return INDY_call384;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call385;
+    private static MethodHandle INDY_call385 () throws Throwable {
+        if (INDY_call385 != null)
+            return INDY_call385;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call386;
+    private static MethodHandle INDY_call386 () throws Throwable {
+        if (INDY_call386 != null)
+            return INDY_call386;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call387;
+    private static MethodHandle INDY_call387 () throws Throwable {
+        if (INDY_call387 != null)
+            return INDY_call387;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call388;
+    private static MethodHandle INDY_call388 () throws Throwable {
+        if (INDY_call388 != null)
+            return INDY_call388;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call389;
+    private static MethodHandle INDY_call389 () throws Throwable {
+        if (INDY_call389 != null)
+            return INDY_call389;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call390;
+    private static MethodHandle INDY_call390 () throws Throwable {
+        if (INDY_call390 != null)
+            return INDY_call390;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call391;
+    private static MethodHandle INDY_call391 () throws Throwable {
+        if (INDY_call391 != null)
+            return INDY_call391;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call392;
+    private static MethodHandle INDY_call392 () throws Throwable {
+        if (INDY_call392 != null)
+            return INDY_call392;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call393;
+    private static MethodHandle INDY_call393 () throws Throwable {
+        if (INDY_call393 != null)
+            return INDY_call393;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call394;
+    private static MethodHandle INDY_call394 () throws Throwable {
+        if (INDY_call394 != null)
+            return INDY_call394;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call395;
+    private static MethodHandle INDY_call395 () throws Throwable {
+        if (INDY_call395 != null)
+            return INDY_call395;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call396;
+    private static MethodHandle INDY_call396 () throws Throwable {
+        if (INDY_call396 != null)
+            return INDY_call396;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call397;
+    private static MethodHandle INDY_call397 () throws Throwable {
+        if (INDY_call397 != null)
+            return INDY_call397;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call398;
+    private static MethodHandle INDY_call398 () throws Throwable {
+        if (INDY_call398 != null)
+            return INDY_call398;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call399;
+    private static MethodHandle INDY_call399 () throws Throwable {
+        if (INDY_call399 != null)
+            return INDY_call399;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call400;
+    private static MethodHandle INDY_call400 () throws Throwable {
+        if (INDY_call400 != null)
+            return INDY_call400;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call401;
+    private static MethodHandle INDY_call401 () throws Throwable {
+        if (INDY_call401 != null)
+            return INDY_call401;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call402;
+    private static MethodHandle INDY_call402 () throws Throwable {
+        if (INDY_call402 != null)
+            return INDY_call402;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call403;
+    private static MethodHandle INDY_call403 () throws Throwable {
+        if (INDY_call403 != null)
+            return INDY_call403;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call404;
+    private static MethodHandle INDY_call404 () throws Throwable {
+        if (INDY_call404 != null)
+            return INDY_call404;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call405;
+    private static MethodHandle INDY_call405 () throws Throwable {
+        if (INDY_call405 != null)
+            return INDY_call405;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call406;
+    private static MethodHandle INDY_call406 () throws Throwable {
+        if (INDY_call406 != null)
+            return INDY_call406;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call407;
+    private static MethodHandle INDY_call407 () throws Throwable {
+        if (INDY_call407 != null)
+            return INDY_call407;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call408;
+    private static MethodHandle INDY_call408 () throws Throwable {
+        if (INDY_call408 != null)
+            return INDY_call408;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call409;
+    private static MethodHandle INDY_call409 () throws Throwable {
+        if (INDY_call409 != null)
+            return INDY_call409;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call410;
+    private static MethodHandle INDY_call410 () throws Throwable {
+        if (INDY_call410 != null)
+            return INDY_call410;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call411;
+    private static MethodHandle INDY_call411 () throws Throwable {
+        if (INDY_call411 != null)
+            return INDY_call411;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call412;
+    private static MethodHandle INDY_call412 () throws Throwable {
+        if (INDY_call412 != null)
+            return INDY_call412;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call413;
+    private static MethodHandle INDY_call413 () throws Throwable {
+        if (INDY_call413 != null)
+            return INDY_call413;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call414;
+    private static MethodHandle INDY_call414 () throws Throwable {
+        if (INDY_call414 != null)
+            return INDY_call414;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call415;
+    private static MethodHandle INDY_call415 () throws Throwable {
+        if (INDY_call415 != null)
+            return INDY_call415;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call416;
+    private static MethodHandle INDY_call416 () throws Throwable {
+        if (INDY_call416 != null)
+            return INDY_call416;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call417;
+    private static MethodHandle INDY_call417 () throws Throwable {
+        if (INDY_call417 != null)
+            return INDY_call417;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call418;
+    private static MethodHandle INDY_call418 () throws Throwable {
+        if (INDY_call418 != null)
+            return INDY_call418;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call419;
+    private static MethodHandle INDY_call419 () throws Throwable {
+        if (INDY_call419 != null)
+            return INDY_call419;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call420;
+    private static MethodHandle INDY_call420 () throws Throwable {
+        if (INDY_call420 != null)
+            return INDY_call420;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call421;
+    private static MethodHandle INDY_call421 () throws Throwable {
+        if (INDY_call421 != null)
+            return INDY_call421;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call422;
+    private static MethodHandle INDY_call422 () throws Throwable {
+        if (INDY_call422 != null)
+            return INDY_call422;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call423;
+    private static MethodHandle INDY_call423 () throws Throwable {
+        if (INDY_call423 != null)
+            return INDY_call423;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call424;
+    private static MethodHandle INDY_call424 () throws Throwable {
+        if (INDY_call424 != null)
+            return INDY_call424;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call425;
+    private static MethodHandle INDY_call425 () throws Throwable {
+        if (INDY_call425 != null)
+            return INDY_call425;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call426;
+    private static MethodHandle INDY_call426 () throws Throwable {
+        if (INDY_call426 != null)
+            return INDY_call426;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call427;
+    private static MethodHandle INDY_call427 () throws Throwable {
+        if (INDY_call427 != null)
+            return INDY_call427;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call428;
+    private static MethodHandle INDY_call428 () throws Throwable {
+        if (INDY_call428 != null)
+            return INDY_call428;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call429;
+    private static MethodHandle INDY_call429 () throws Throwable {
+        if (INDY_call429 != null)
+            return INDY_call429;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call430;
+    private static MethodHandle INDY_call430 () throws Throwable {
+        if (INDY_call430 != null)
+            return INDY_call430;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call431;
+    private static MethodHandle INDY_call431 () throws Throwable {
+        if (INDY_call431 != null)
+            return INDY_call431;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call432;
+    private static MethodHandle INDY_call432 () throws Throwable {
+        if (INDY_call432 != null)
+            return INDY_call432;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call433;
+    private static MethodHandle INDY_call433 () throws Throwable {
+        if (INDY_call433 != null)
+            return INDY_call433;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call434;
+    private static MethodHandle INDY_call434 () throws Throwable {
+        if (INDY_call434 != null)
+            return INDY_call434;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call435;
+    private static MethodHandle INDY_call435 () throws Throwable {
+        if (INDY_call435 != null)
+            return INDY_call435;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call436;
+    private static MethodHandle INDY_call436 () throws Throwable {
+        if (INDY_call436 != null)
+            return INDY_call436;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call437;
+    private static MethodHandle INDY_call437 () throws Throwable {
+        if (INDY_call437 != null)
+            return INDY_call437;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call438;
+    private static MethodHandle INDY_call438 () throws Throwable {
+        if (INDY_call438 != null)
+            return INDY_call438;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call439;
+    private static MethodHandle INDY_call439 () throws Throwable {
+        if (INDY_call439 != null)
+            return INDY_call439;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call440;
+    private static MethodHandle INDY_call440 () throws Throwable {
+        if (INDY_call440 != null)
+            return INDY_call440;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call441;
+    private static MethodHandle INDY_call441 () throws Throwable {
+        if (INDY_call441 != null)
+            return INDY_call441;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call442;
+    private static MethodHandle INDY_call442 () throws Throwable {
+        if (INDY_call442 != null)
+            return INDY_call442;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call443;
+    private static MethodHandle INDY_call443 () throws Throwable {
+        if (INDY_call443 != null)
+            return INDY_call443;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call444;
+    private static MethodHandle INDY_call444 () throws Throwable {
+        if (INDY_call444 != null)
+            return INDY_call444;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call445;
+    private static MethodHandle INDY_call445 () throws Throwable {
+        if (INDY_call445 != null)
+            return INDY_call445;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call446;
+    private static MethodHandle INDY_call446 () throws Throwable {
+        if (INDY_call446 != null)
+            return INDY_call446;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call447;
+    private static MethodHandle INDY_call447 () throws Throwable {
+        if (INDY_call447 != null)
+            return INDY_call447;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call448;
+    private static MethodHandle INDY_call448 () throws Throwable {
+        if (INDY_call448 != null)
+            return INDY_call448;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call449;
+    private static MethodHandle INDY_call449 () throws Throwable {
+        if (INDY_call449 != null)
+            return INDY_call449;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call450;
+    private static MethodHandle INDY_call450 () throws Throwable {
+        if (INDY_call450 != null)
+            return INDY_call450;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call451;
+    private static MethodHandle INDY_call451 () throws Throwable {
+        if (INDY_call451 != null)
+            return INDY_call451;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call452;
+    private static MethodHandle INDY_call452 () throws Throwable {
+        if (INDY_call452 != null)
+            return INDY_call452;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call453;
+    private static MethodHandle INDY_call453 () throws Throwable {
+        if (INDY_call453 != null)
+            return INDY_call453;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call454;
+    private static MethodHandle INDY_call454 () throws Throwable {
+        if (INDY_call454 != null)
+            return INDY_call454;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call455;
+    private static MethodHandle INDY_call455 () throws Throwable {
+        if (INDY_call455 != null)
+            return INDY_call455;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call456;
+    private static MethodHandle INDY_call456 () throws Throwable {
+        if (INDY_call456 != null)
+            return INDY_call456;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call457;
+    private static MethodHandle INDY_call457 () throws Throwable {
+        if (INDY_call457 != null)
+            return INDY_call457;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call458;
+    private static MethodHandle INDY_call458 () throws Throwable {
+        if (INDY_call458 != null)
+            return INDY_call458;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call459;
+    private static MethodHandle INDY_call459 () throws Throwable {
+        if (INDY_call459 != null)
+            return INDY_call459;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call460;
+    private static MethodHandle INDY_call460 () throws Throwable {
+        if (INDY_call460 != null)
+            return INDY_call460;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call461;
+    private static MethodHandle INDY_call461 () throws Throwable {
+        if (INDY_call461 != null)
+            return INDY_call461;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call462;
+    private static MethodHandle INDY_call462 () throws Throwable {
+        if (INDY_call462 != null)
+            return INDY_call462;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call463;
+    private static MethodHandle INDY_call463 () throws Throwable {
+        if (INDY_call463 != null)
+            return INDY_call463;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call464;
+    private static MethodHandle INDY_call464 () throws Throwable {
+        if (INDY_call464 != null)
+            return INDY_call464;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call465;
+    private static MethodHandle INDY_call465 () throws Throwable {
+        if (INDY_call465 != null)
+            return INDY_call465;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call466;
+    private static MethodHandle INDY_call466 () throws Throwable {
+        if (INDY_call466 != null)
+            return INDY_call466;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call467;
+    private static MethodHandle INDY_call467 () throws Throwable {
+        if (INDY_call467 != null)
+            return INDY_call467;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call468;
+    private static MethodHandle INDY_call468 () throws Throwable {
+        if (INDY_call468 != null)
+            return INDY_call468;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call469;
+    private static MethodHandle INDY_call469 () throws Throwable {
+        if (INDY_call469 != null)
+            return INDY_call469;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call470;
+    private static MethodHandle INDY_call470 () throws Throwable {
+        if (INDY_call470 != null)
+            return INDY_call470;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call471;
+    private static MethodHandle INDY_call471 () throws Throwable {
+        if (INDY_call471 != null)
+            return INDY_call471;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call472;
+    private static MethodHandle INDY_call472 () throws Throwable {
+        if (INDY_call472 != null)
+            return INDY_call472;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call473;
+    private static MethodHandle INDY_call473 () throws Throwable {
+        if (INDY_call473 != null)
+            return INDY_call473;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call474;
+    private static MethodHandle INDY_call474 () throws Throwable {
+        if (INDY_call474 != null)
+            return INDY_call474;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call475;
+    private static MethodHandle INDY_call475 () throws Throwable {
+        if (INDY_call475 != null)
+            return INDY_call475;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call476;
+    private static MethodHandle INDY_call476 () throws Throwable {
+        if (INDY_call476 != null)
+            return INDY_call476;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call477;
+    private static MethodHandle INDY_call477 () throws Throwable {
+        if (INDY_call477 != null)
+            return INDY_call477;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call478;
+    private static MethodHandle INDY_call478 () throws Throwable {
+        if (INDY_call478 != null)
+            return INDY_call478;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call479;
+    private static MethodHandle INDY_call479 () throws Throwable {
+        if (INDY_call479 != null)
+            return INDY_call479;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call480;
+    private static MethodHandle INDY_call480 () throws Throwable {
+        if (INDY_call480 != null)
+            return INDY_call480;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call481;
+    private static MethodHandle INDY_call481 () throws Throwable {
+        if (INDY_call481 != null)
+            return INDY_call481;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call482;
+    private static MethodHandle INDY_call482 () throws Throwable {
+        if (INDY_call482 != null)
+            return INDY_call482;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call483;
+    private static MethodHandle INDY_call483 () throws Throwable {
+        if (INDY_call483 != null)
+            return INDY_call483;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call484;
+    private static MethodHandle INDY_call484 () throws Throwable {
+        if (INDY_call484 != null)
+            return INDY_call484;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call485;
+    private static MethodHandle INDY_call485 () throws Throwable {
+        if (INDY_call485 != null)
+            return INDY_call485;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call486;
+    private static MethodHandle INDY_call486 () throws Throwable {
+        if (INDY_call486 != null)
+            return INDY_call486;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call487;
+    private static MethodHandle INDY_call487 () throws Throwable {
+        if (INDY_call487 != null)
+            return INDY_call487;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call488;
+    private static MethodHandle INDY_call488 () throws Throwable {
+        if (INDY_call488 != null)
+            return INDY_call488;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call489;
+    private static MethodHandle INDY_call489 () throws Throwable {
+        if (INDY_call489 != null)
+            return INDY_call489;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call490;
+    private static MethodHandle INDY_call490 () throws Throwable {
+        if (INDY_call490 != null)
+            return INDY_call490;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call491;
+    private static MethodHandle INDY_call491 () throws Throwable {
+        if (INDY_call491 != null)
+            return INDY_call491;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call492;
+    private static MethodHandle INDY_call492 () throws Throwable {
+        if (INDY_call492 != null)
+            return INDY_call492;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call493;
+    private static MethodHandle INDY_call493 () throws Throwable {
+        if (INDY_call493 != null)
+            return INDY_call493;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call494;
+    private static MethodHandle INDY_call494 () throws Throwable {
+        if (INDY_call494 != null)
+            return INDY_call494;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call495;
+    private static MethodHandle INDY_call495 () throws Throwable {
+        if (INDY_call495 != null)
+            return INDY_call495;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call496;
+    private static MethodHandle INDY_call496 () throws Throwable {
+        if (INDY_call496 != null)
+            return INDY_call496;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call497;
+    private static MethodHandle INDY_call497 () throws Throwable {
+        if (INDY_call497 != null)
+            return INDY_call497;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call498;
+    private static MethodHandle INDY_call498 () throws Throwable {
+        if (INDY_call498 != null)
+            return INDY_call498;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call499;
+    private static MethodHandle INDY_call499 () throws Throwable {
+        if (INDY_call499 != null)
+            return INDY_call499;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call500;
+    private static MethodHandle INDY_call500 () throws Throwable {
+        if (INDY_call500 != null)
+            return INDY_call500;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call501;
+    private static MethodHandle INDY_call501 () throws Throwable {
+        if (INDY_call501 != null)
+            return INDY_call501;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call502;
+    private static MethodHandle INDY_call502 () throws Throwable {
+        if (INDY_call502 != null)
+            return INDY_call502;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call503;
+    private static MethodHandle INDY_call503 () throws Throwable {
+        if (INDY_call503 != null)
+            return INDY_call503;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call504;
+    private static MethodHandle INDY_call504 () throws Throwable {
+        if (INDY_call504 != null)
+            return INDY_call504;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call505;
+    private static MethodHandle INDY_call505 () throws Throwable {
+        if (INDY_call505 != null)
+            return INDY_call505;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call506;
+    private static MethodHandle INDY_call506 () throws Throwable {
+        if (INDY_call506 != null)
+            return INDY_call506;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call507;
+    private static MethodHandle INDY_call507 () throws Throwable {
+        if (INDY_call507 != null)
+            return INDY_call507;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call508;
+    private static MethodHandle INDY_call508 () throws Throwable {
+        if (INDY_call508 != null)
+            return INDY_call508;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call509;
+    private static MethodHandle INDY_call509 () throws Throwable {
+        if (INDY_call509 != null)
+            return INDY_call509;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call510;
+    private static MethodHandle INDY_call510 () throws Throwable {
+        if (INDY_call510 != null)
+            return INDY_call510;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call511;
+    private static MethodHandle INDY_call511 () throws Throwable {
+        if (INDY_call511 != null)
+            return INDY_call511;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call512;
+    private static MethodHandle INDY_call512 () throws Throwable {
+        if (INDY_call512 != null)
+            return INDY_call512;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call513;
+    private static MethodHandle INDY_call513 () throws Throwable {
+        if (INDY_call513 != null)
+            return INDY_call513;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call514;
+    private static MethodHandle INDY_call514 () throws Throwable {
+        if (INDY_call514 != null)
+            return INDY_call514;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call515;
+    private static MethodHandle INDY_call515 () throws Throwable {
+        if (INDY_call515 != null)
+            return INDY_call515;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call516;
+    private static MethodHandle INDY_call516 () throws Throwable {
+        if (INDY_call516 != null)
+            return INDY_call516;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call517;
+    private static MethodHandle INDY_call517 () throws Throwable {
+        if (INDY_call517 != null)
+            return INDY_call517;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call518;
+    private static MethodHandle INDY_call518 () throws Throwable {
+        if (INDY_call518 != null)
+            return INDY_call518;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call519;
+    private static MethodHandle INDY_call519 () throws Throwable {
+        if (INDY_call519 != null)
+            return INDY_call519;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call520;
+    private static MethodHandle INDY_call520 () throws Throwable {
+        if (INDY_call520 != null)
+            return INDY_call520;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call521;
+    private static MethodHandle INDY_call521 () throws Throwable {
+        if (INDY_call521 != null)
+            return INDY_call521;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call522;
+    private static MethodHandle INDY_call522 () throws Throwable {
+        if (INDY_call522 != null)
+            return INDY_call522;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call523;
+    private static MethodHandle INDY_call523 () throws Throwable {
+        if (INDY_call523 != null)
+            return INDY_call523;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call524;
+    private static MethodHandle INDY_call524 () throws Throwable {
+        if (INDY_call524 != null)
+            return INDY_call524;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call525;
+    private static MethodHandle INDY_call525 () throws Throwable {
+        if (INDY_call525 != null)
+            return INDY_call525;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call526;
+    private static MethodHandle INDY_call526 () throws Throwable {
+        if (INDY_call526 != null)
+            return INDY_call526;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call527;
+    private static MethodHandle INDY_call527 () throws Throwable {
+        if (INDY_call527 != null)
+            return INDY_call527;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call528;
+    private static MethodHandle INDY_call528 () throws Throwable {
+        if (INDY_call528 != null)
+            return INDY_call528;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call529;
+    private static MethodHandle INDY_call529 () throws Throwable {
+        if (INDY_call529 != null)
+            return INDY_call529;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call530;
+    private static MethodHandle INDY_call530 () throws Throwable {
+        if (INDY_call530 != null)
+            return INDY_call530;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call531;
+    private static MethodHandle INDY_call531 () throws Throwable {
+        if (INDY_call531 != null)
+            return INDY_call531;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call532;
+    private static MethodHandle INDY_call532 () throws Throwable {
+        if (INDY_call532 != null)
+            return INDY_call532;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call533;
+    private static MethodHandle INDY_call533 () throws Throwable {
+        if (INDY_call533 != null)
+            return INDY_call533;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call534;
+    private static MethodHandle INDY_call534 () throws Throwable {
+        if (INDY_call534 != null)
+            return INDY_call534;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call535;
+    private static MethodHandle INDY_call535 () throws Throwable {
+        if (INDY_call535 != null)
+            return INDY_call535;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call536;
+    private static MethodHandle INDY_call536 () throws Throwable {
+        if (INDY_call536 != null)
+            return INDY_call536;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call537;
+    private static MethodHandle INDY_call537 () throws Throwable {
+        if (INDY_call537 != null)
+            return INDY_call537;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call538;
+    private static MethodHandle INDY_call538 () throws Throwable {
+        if (INDY_call538 != null)
+            return INDY_call538;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call539;
+    private static MethodHandle INDY_call539 () throws Throwable {
+        if (INDY_call539 != null)
+            return INDY_call539;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call540;
+    private static MethodHandle INDY_call540 () throws Throwable {
+        if (INDY_call540 != null)
+            return INDY_call540;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call541;
+    private static MethodHandle INDY_call541 () throws Throwable {
+        if (INDY_call541 != null)
+            return INDY_call541;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call542;
+    private static MethodHandle INDY_call542 () throws Throwable {
+        if (INDY_call542 != null)
+            return INDY_call542;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call543;
+    private static MethodHandle INDY_call543 () throws Throwable {
+        if (INDY_call543 != null)
+            return INDY_call543;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call544;
+    private static MethodHandle INDY_call544 () throws Throwable {
+        if (INDY_call544 != null)
+            return INDY_call544;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call545;
+    private static MethodHandle INDY_call545 () throws Throwable {
+        if (INDY_call545 != null)
+            return INDY_call545;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call546;
+    private static MethodHandle INDY_call546 () throws Throwable {
+        if (INDY_call546 != null)
+            return INDY_call546;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call547;
+    private static MethodHandle INDY_call547 () throws Throwable {
+        if (INDY_call547 != null)
+            return INDY_call547;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call548;
+    private static MethodHandle INDY_call548 () throws Throwable {
+        if (INDY_call548 != null)
+            return INDY_call548;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call549;
+    private static MethodHandle INDY_call549 () throws Throwable {
+        if (INDY_call549 != null)
+            return INDY_call549;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call550;
+    private static MethodHandle INDY_call550 () throws Throwable {
+        if (INDY_call550 != null)
+            return INDY_call550;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call551;
+    private static MethodHandle INDY_call551 () throws Throwable {
+        if (INDY_call551 != null)
+            return INDY_call551;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call552;
+    private static MethodHandle INDY_call552 () throws Throwable {
+        if (INDY_call552 != null)
+            return INDY_call552;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call553;
+    private static MethodHandle INDY_call553 () throws Throwable {
+        if (INDY_call553 != null)
+            return INDY_call553;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call554;
+    private static MethodHandle INDY_call554 () throws Throwable {
+        if (INDY_call554 != null)
+            return INDY_call554;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call555;
+    private static MethodHandle INDY_call555 () throws Throwable {
+        if (INDY_call555 != null)
+            return INDY_call555;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call556;
+    private static MethodHandle INDY_call556 () throws Throwable {
+        if (INDY_call556 != null)
+            return INDY_call556;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call557;
+    private static MethodHandle INDY_call557 () throws Throwable {
+        if (INDY_call557 != null)
+            return INDY_call557;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call558;
+    private static MethodHandle INDY_call558 () throws Throwable {
+        if (INDY_call558 != null)
+            return INDY_call558;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call559;
+    private static MethodHandle INDY_call559 () throws Throwable {
+        if (INDY_call559 != null)
+            return INDY_call559;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call560;
+    private static MethodHandle INDY_call560 () throws Throwable {
+        if (INDY_call560 != null)
+            return INDY_call560;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call561;
+    private static MethodHandle INDY_call561 () throws Throwable {
+        if (INDY_call561 != null)
+            return INDY_call561;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call562;
+    private static MethodHandle INDY_call562 () throws Throwable {
+        if (INDY_call562 != null)
+            return INDY_call562;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call563;
+    private static MethodHandle INDY_call563 () throws Throwable {
+        if (INDY_call563 != null)
+            return INDY_call563;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call564;
+    private static MethodHandle INDY_call564 () throws Throwable {
+        if (INDY_call564 != null)
+            return INDY_call564;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call565;
+    private static MethodHandle INDY_call565 () throws Throwable {
+        if (INDY_call565 != null)
+            return INDY_call565;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call566;
+    private static MethodHandle INDY_call566 () throws Throwable {
+        if (INDY_call566 != null)
+            return INDY_call566;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call567;
+    private static MethodHandle INDY_call567 () throws Throwable {
+        if (INDY_call567 != null)
+            return INDY_call567;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call568;
+    private static MethodHandle INDY_call568 () throws Throwable {
+        if (INDY_call568 != null)
+            return INDY_call568;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call569;
+    private static MethodHandle INDY_call569 () throws Throwable {
+        if (INDY_call569 != null)
+            return INDY_call569;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call570;
+    private static MethodHandle INDY_call570 () throws Throwable {
+        if (INDY_call570 != null)
+            return INDY_call570;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call571;
+    private static MethodHandle INDY_call571 () throws Throwable {
+        if (INDY_call571 != null)
+            return INDY_call571;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call572;
+    private static MethodHandle INDY_call572 () throws Throwable {
+        if (INDY_call572 != null)
+            return INDY_call572;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call573;
+    private static MethodHandle INDY_call573 () throws Throwable {
+        if (INDY_call573 != null)
+            return INDY_call573;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call574;
+    private static MethodHandle INDY_call574 () throws Throwable {
+        if (INDY_call574 != null)
+            return INDY_call574;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call575;
+    private static MethodHandle INDY_call575 () throws Throwable {
+        if (INDY_call575 != null)
+            return INDY_call575;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call576;
+    private static MethodHandle INDY_call576 () throws Throwable {
+        if (INDY_call576 != null)
+            return INDY_call576;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call577;
+    private static MethodHandle INDY_call577 () throws Throwable {
+        if (INDY_call577 != null)
+            return INDY_call577;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call578;
+    private static MethodHandle INDY_call578 () throws Throwable {
+        if (INDY_call578 != null)
+            return INDY_call578;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call579;
+    private static MethodHandle INDY_call579 () throws Throwable {
+        if (INDY_call579 != null)
+            return INDY_call579;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call580;
+    private static MethodHandle INDY_call580 () throws Throwable {
+        if (INDY_call580 != null)
+            return INDY_call580;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call581;
+    private static MethodHandle INDY_call581 () throws Throwable {
+        if (INDY_call581 != null)
+            return INDY_call581;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call582;
+    private static MethodHandle INDY_call582 () throws Throwable {
+        if (INDY_call582 != null)
+            return INDY_call582;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call583;
+    private static MethodHandle INDY_call583 () throws Throwable {
+        if (INDY_call583 != null)
+            return INDY_call583;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call584;
+    private static MethodHandle INDY_call584 () throws Throwable {
+        if (INDY_call584 != null)
+            return INDY_call584;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call585;
+    private static MethodHandle INDY_call585 () throws Throwable {
+        if (INDY_call585 != null)
+            return INDY_call585;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call586;
+    private static MethodHandle INDY_call586 () throws Throwable {
+        if (INDY_call586 != null)
+            return INDY_call586;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call587;
+    private static MethodHandle INDY_call587 () throws Throwable {
+        if (INDY_call587 != null)
+            return INDY_call587;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call588;
+    private static MethodHandle INDY_call588 () throws Throwable {
+        if (INDY_call588 != null)
+            return INDY_call588;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call589;
+    private static MethodHandle INDY_call589 () throws Throwable {
+        if (INDY_call589 != null)
+            return INDY_call589;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call590;
+    private static MethodHandle INDY_call590 () throws Throwable {
+        if (INDY_call590 != null)
+            return INDY_call590;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call591;
+    private static MethodHandle INDY_call591 () throws Throwable {
+        if (INDY_call591 != null)
+            return INDY_call591;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call592;
+    private static MethodHandle INDY_call592 () throws Throwable {
+        if (INDY_call592 != null)
+            return INDY_call592;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call593;
+    private static MethodHandle INDY_call593 () throws Throwable {
+        if (INDY_call593 != null)
+            return INDY_call593;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call594;
+    private static MethodHandle INDY_call594 () throws Throwable {
+        if (INDY_call594 != null)
+            return INDY_call594;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call595;
+    private static MethodHandle INDY_call595 () throws Throwable {
+        if (INDY_call595 != null)
+            return INDY_call595;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call596;
+    private static MethodHandle INDY_call596 () throws Throwable {
+        if (INDY_call596 != null)
+            return INDY_call596;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call597;
+    private static MethodHandle INDY_call597 () throws Throwable {
+        if (INDY_call597 != null)
+            return INDY_call597;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call598;
+    private static MethodHandle INDY_call598 () throws Throwable {
+        if (INDY_call598 != null)
+            return INDY_call598;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call599;
+    private static MethodHandle INDY_call599 () throws Throwable {
+        if (INDY_call599 != null)
+            return INDY_call599;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call600;
+    private static MethodHandle INDY_call600 () throws Throwable {
+        if (INDY_call600 != null)
+            return INDY_call600;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call601;
+    private static MethodHandle INDY_call601 () throws Throwable {
+        if (INDY_call601 != null)
+            return INDY_call601;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call602;
+    private static MethodHandle INDY_call602 () throws Throwable {
+        if (INDY_call602 != null)
+            return INDY_call602;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call603;
+    private static MethodHandle INDY_call603 () throws Throwable {
+        if (INDY_call603 != null)
+            return INDY_call603;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call604;
+    private static MethodHandle INDY_call604 () throws Throwable {
+        if (INDY_call604 != null)
+            return INDY_call604;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call605;
+    private static MethodHandle INDY_call605 () throws Throwable {
+        if (INDY_call605 != null)
+            return INDY_call605;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call606;
+    private static MethodHandle INDY_call606 () throws Throwable {
+        if (INDY_call606 != null)
+            return INDY_call606;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call607;
+    private static MethodHandle INDY_call607 () throws Throwable {
+        if (INDY_call607 != null)
+            return INDY_call607;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call608;
+    private static MethodHandle INDY_call608 () throws Throwable {
+        if (INDY_call608 != null)
+            return INDY_call608;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call609;
+    private static MethodHandle INDY_call609 () throws Throwable {
+        if (INDY_call609 != null)
+            return INDY_call609;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call610;
+    private static MethodHandle INDY_call610 () throws Throwable {
+        if (INDY_call610 != null)
+            return INDY_call610;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call611;
+    private static MethodHandle INDY_call611 () throws Throwable {
+        if (INDY_call611 != null)
+            return INDY_call611;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call612;
+    private static MethodHandle INDY_call612 () throws Throwable {
+        if (INDY_call612 != null)
+            return INDY_call612;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call613;
+    private static MethodHandle INDY_call613 () throws Throwable {
+        if (INDY_call613 != null)
+            return INDY_call613;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call614;
+    private static MethodHandle INDY_call614 () throws Throwable {
+        if (INDY_call614 != null)
+            return INDY_call614;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call615;
+    private static MethodHandle INDY_call615 () throws Throwable {
+        if (INDY_call615 != null)
+            return INDY_call615;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call616;
+    private static MethodHandle INDY_call616 () throws Throwable {
+        if (INDY_call616 != null)
+            return INDY_call616;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call617;
+    private static MethodHandle INDY_call617 () throws Throwable {
+        if (INDY_call617 != null)
+            return INDY_call617;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call618;
+    private static MethodHandle INDY_call618 () throws Throwable {
+        if (INDY_call618 != null)
+            return INDY_call618;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call619;
+    private static MethodHandle INDY_call619 () throws Throwable {
+        if (INDY_call619 != null)
+            return INDY_call619;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call620;
+    private static MethodHandle INDY_call620 () throws Throwable {
+        if (INDY_call620 != null)
+            return INDY_call620;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call621;
+    private static MethodHandle INDY_call621 () throws Throwable {
+        if (INDY_call621 != null)
+            return INDY_call621;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call622;
+    private static MethodHandle INDY_call622 () throws Throwable {
+        if (INDY_call622 != null)
+            return INDY_call622;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call623;
+    private static MethodHandle INDY_call623 () throws Throwable {
+        if (INDY_call623 != null)
+            return INDY_call623;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call624;
+    private static MethodHandle INDY_call624 () throws Throwable {
+        if (INDY_call624 != null)
+            return INDY_call624;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call625;
+    private static MethodHandle INDY_call625 () throws Throwable {
+        if (INDY_call625 != null)
+            return INDY_call625;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call626;
+    private static MethodHandle INDY_call626 () throws Throwable {
+        if (INDY_call626 != null)
+            return INDY_call626;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call627;
+    private static MethodHandle INDY_call627 () throws Throwable {
+        if (INDY_call627 != null)
+            return INDY_call627;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call628;
+    private static MethodHandle INDY_call628 () throws Throwable {
+        if (INDY_call628 != null)
+            return INDY_call628;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call629;
+    private static MethodHandle INDY_call629 () throws Throwable {
+        if (INDY_call629 != null)
+            return INDY_call629;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call630;
+    private static MethodHandle INDY_call630 () throws Throwable {
+        if (INDY_call630 != null)
+            return INDY_call630;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call631;
+    private static MethodHandle INDY_call631 () throws Throwable {
+        if (INDY_call631 != null)
+            return INDY_call631;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call632;
+    private static MethodHandle INDY_call632 () throws Throwable {
+        if (INDY_call632 != null)
+            return INDY_call632;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call633;
+    private static MethodHandle INDY_call633 () throws Throwable {
+        if (INDY_call633 != null)
+            return INDY_call633;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call634;
+    private static MethodHandle INDY_call634 () throws Throwable {
+        if (INDY_call634 != null)
+            return INDY_call634;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call635;
+    private static MethodHandle INDY_call635 () throws Throwable {
+        if (INDY_call635 != null)
+            return INDY_call635;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call636;
+    private static MethodHandle INDY_call636 () throws Throwable {
+        if (INDY_call636 != null)
+            return INDY_call636;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call637;
+    private static MethodHandle INDY_call637 () throws Throwable {
+        if (INDY_call637 != null)
+            return INDY_call637;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call638;
+    private static MethodHandle INDY_call638 () throws Throwable {
+        if (INDY_call638 != null)
+            return INDY_call638;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call639;
+    private static MethodHandle INDY_call639 () throws Throwable {
+        if (INDY_call639 != null)
+            return INDY_call639;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call640;
+    private static MethodHandle INDY_call640 () throws Throwable {
+        if (INDY_call640 != null)
+            return INDY_call640;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call641;
+    private static MethodHandle INDY_call641 () throws Throwable {
+        if (INDY_call641 != null)
+            return INDY_call641;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call642;
+    private static MethodHandle INDY_call642 () throws Throwable {
+        if (INDY_call642 != null)
+            return INDY_call642;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call643;
+    private static MethodHandle INDY_call643 () throws Throwable {
+        if (INDY_call643 != null)
+            return INDY_call643;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call644;
+    private static MethodHandle INDY_call644 () throws Throwable {
+        if (INDY_call644 != null)
+            return INDY_call644;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call645;
+    private static MethodHandle INDY_call645 () throws Throwable {
+        if (INDY_call645 != null)
+            return INDY_call645;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call646;
+    private static MethodHandle INDY_call646 () throws Throwable {
+        if (INDY_call646 != null)
+            return INDY_call646;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call647;
+    private static MethodHandle INDY_call647 () throws Throwable {
+        if (INDY_call647 != null)
+            return INDY_call647;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call648;
+    private static MethodHandle INDY_call648 () throws Throwable {
+        if (INDY_call648 != null)
+            return INDY_call648;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call649;
+    private static MethodHandle INDY_call649 () throws Throwable {
+        if (INDY_call649 != null)
+            return INDY_call649;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call650;
+    private static MethodHandle INDY_call650 () throws Throwable {
+        if (INDY_call650 != null)
+            return INDY_call650;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call651;
+    private static MethodHandle INDY_call651 () throws Throwable {
+        if (INDY_call651 != null)
+            return INDY_call651;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call652;
+    private static MethodHandle INDY_call652 () throws Throwable {
+        if (INDY_call652 != null)
+            return INDY_call652;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call653;
+    private static MethodHandle INDY_call653 () throws Throwable {
+        if (INDY_call653 != null)
+            return INDY_call653;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call654;
+    private static MethodHandle INDY_call654 () throws Throwable {
+        if (INDY_call654 != null)
+            return INDY_call654;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call655;
+    private static MethodHandle INDY_call655 () throws Throwable {
+        if (INDY_call655 != null)
+            return INDY_call655;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call656;
+    private static MethodHandle INDY_call656 () throws Throwable {
+        if (INDY_call656 != null)
+            return INDY_call656;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call657;
+    private static MethodHandle INDY_call657 () throws Throwable {
+        if (INDY_call657 != null)
+            return INDY_call657;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call658;
+    private static MethodHandle INDY_call658 () throws Throwable {
+        if (INDY_call658 != null)
+            return INDY_call658;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call659;
+    private static MethodHandle INDY_call659 () throws Throwable {
+        if (INDY_call659 != null)
+            return INDY_call659;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call660;
+    private static MethodHandle INDY_call660 () throws Throwable {
+        if (INDY_call660 != null)
+            return INDY_call660;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call661;
+    private static MethodHandle INDY_call661 () throws Throwable {
+        if (INDY_call661 != null)
+            return INDY_call661;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call662;
+    private static MethodHandle INDY_call662 () throws Throwable {
+        if (INDY_call662 != null)
+            return INDY_call662;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call663;
+    private static MethodHandle INDY_call663 () throws Throwable {
+        if (INDY_call663 != null)
+            return INDY_call663;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call664;
+    private static MethodHandle INDY_call664 () throws Throwable {
+        if (INDY_call664 != null)
+            return INDY_call664;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call665;
+    private static MethodHandle INDY_call665 () throws Throwable {
+        if (INDY_call665 != null)
+            return INDY_call665;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call666;
+    private static MethodHandle INDY_call666 () throws Throwable {
+        if (INDY_call666 != null)
+            return INDY_call666;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call667;
+    private static MethodHandle INDY_call667 () throws Throwable {
+        if (INDY_call667 != null)
+            return INDY_call667;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call668;
+    private static MethodHandle INDY_call668 () throws Throwable {
+        if (INDY_call668 != null)
+            return INDY_call668;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call669;
+    private static MethodHandle INDY_call669 () throws Throwable {
+        if (INDY_call669 != null)
+            return INDY_call669;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call670;
+    private static MethodHandle INDY_call670 () throws Throwable {
+        if (INDY_call670 != null)
+            return INDY_call670;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call671;
+    private static MethodHandle INDY_call671 () throws Throwable {
+        if (INDY_call671 != null)
+            return INDY_call671;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call672;
+    private static MethodHandle INDY_call672 () throws Throwable {
+        if (INDY_call672 != null)
+            return INDY_call672;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call673;
+    private static MethodHandle INDY_call673 () throws Throwable {
+        if (INDY_call673 != null)
+            return INDY_call673;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call674;
+    private static MethodHandle INDY_call674 () throws Throwable {
+        if (INDY_call674 != null)
+            return INDY_call674;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call675;
+    private static MethodHandle INDY_call675 () throws Throwable {
+        if (INDY_call675 != null)
+            return INDY_call675;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call676;
+    private static MethodHandle INDY_call676 () throws Throwable {
+        if (INDY_call676 != null)
+            return INDY_call676;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call677;
+    private static MethodHandle INDY_call677 () throws Throwable {
+        if (INDY_call677 != null)
+            return INDY_call677;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call678;
+    private static MethodHandle INDY_call678 () throws Throwable {
+        if (INDY_call678 != null)
+            return INDY_call678;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call679;
+    private static MethodHandle INDY_call679 () throws Throwable {
+        if (INDY_call679 != null)
+            return INDY_call679;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call680;
+    private static MethodHandle INDY_call680 () throws Throwable {
+        if (INDY_call680 != null)
+            return INDY_call680;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call681;
+    private static MethodHandle INDY_call681 () throws Throwable {
+        if (INDY_call681 != null)
+            return INDY_call681;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call682;
+    private static MethodHandle INDY_call682 () throws Throwable {
+        if (INDY_call682 != null)
+            return INDY_call682;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call683;
+    private static MethodHandle INDY_call683 () throws Throwable {
+        if (INDY_call683 != null)
+            return INDY_call683;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call684;
+    private static MethodHandle INDY_call684 () throws Throwable {
+        if (INDY_call684 != null)
+            return INDY_call684;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call685;
+    private static MethodHandle INDY_call685 () throws Throwable {
+        if (INDY_call685 != null)
+            return INDY_call685;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call686;
+    private static MethodHandle INDY_call686 () throws Throwable {
+        if (INDY_call686 != null)
+            return INDY_call686;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call687;
+    private static MethodHandle INDY_call687 () throws Throwable {
+        if (INDY_call687 != null)
+            return INDY_call687;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call688;
+    private static MethodHandle INDY_call688 () throws Throwable {
+        if (INDY_call688 != null)
+            return INDY_call688;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call689;
+    private static MethodHandle INDY_call689 () throws Throwable {
+        if (INDY_call689 != null)
+            return INDY_call689;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call690;
+    private static MethodHandle INDY_call690 () throws Throwable {
+        if (INDY_call690 != null)
+            return INDY_call690;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call691;
+    private static MethodHandle INDY_call691 () throws Throwable {
+        if (INDY_call691 != null)
+            return INDY_call691;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call692;
+    private static MethodHandle INDY_call692 () throws Throwable {
+        if (INDY_call692 != null)
+            return INDY_call692;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call693;
+    private static MethodHandle INDY_call693 () throws Throwable {
+        if (INDY_call693 != null)
+            return INDY_call693;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call694;
+    private static MethodHandle INDY_call694 () throws Throwable {
+        if (INDY_call694 != null)
+            return INDY_call694;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call695;
+    private static MethodHandle INDY_call695 () throws Throwable {
+        if (INDY_call695 != null)
+            return INDY_call695;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call696;
+    private static MethodHandle INDY_call696 () throws Throwable {
+        if (INDY_call696 != null)
+            return INDY_call696;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call697;
+    private static MethodHandle INDY_call697 () throws Throwable {
+        if (INDY_call697 != null)
+            return INDY_call697;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call698;
+    private static MethodHandle INDY_call698 () throws Throwable {
+        if (INDY_call698 != null)
+            return INDY_call698;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call699;
+    private static MethodHandle INDY_call699 () throws Throwable {
+        if (INDY_call699 != null)
+            return INDY_call699;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call700;
+    private static MethodHandle INDY_call700 () throws Throwable {
+        if (INDY_call700 != null)
+            return INDY_call700;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call701;
+    private static MethodHandle INDY_call701 () throws Throwable {
+        if (INDY_call701 != null)
+            return INDY_call701;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call702;
+    private static MethodHandle INDY_call702 () throws Throwable {
+        if (INDY_call702 != null)
+            return INDY_call702;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call703;
+    private static MethodHandle INDY_call703 () throws Throwable {
+        if (INDY_call703 != null)
+            return INDY_call703;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call704;
+    private static MethodHandle INDY_call704 () throws Throwable {
+        if (INDY_call704 != null)
+            return INDY_call704;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call705;
+    private static MethodHandle INDY_call705 () throws Throwable {
+        if (INDY_call705 != null)
+            return INDY_call705;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call706;
+    private static MethodHandle INDY_call706 () throws Throwable {
+        if (INDY_call706 != null)
+            return INDY_call706;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call707;
+    private static MethodHandle INDY_call707 () throws Throwable {
+        if (INDY_call707 != null)
+            return INDY_call707;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call708;
+    private static MethodHandle INDY_call708 () throws Throwable {
+        if (INDY_call708 != null)
+            return INDY_call708;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call709;
+    private static MethodHandle INDY_call709 () throws Throwable {
+        if (INDY_call709 != null)
+            return INDY_call709;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call710;
+    private static MethodHandle INDY_call710 () throws Throwable {
+        if (INDY_call710 != null)
+            return INDY_call710;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call711;
+    private static MethodHandle INDY_call711 () throws Throwable {
+        if (INDY_call711 != null)
+            return INDY_call711;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call712;
+    private static MethodHandle INDY_call712 () throws Throwable {
+        if (INDY_call712 != null)
+            return INDY_call712;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call713;
+    private static MethodHandle INDY_call713 () throws Throwable {
+        if (INDY_call713 != null)
+            return INDY_call713;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call714;
+    private static MethodHandle INDY_call714 () throws Throwable {
+        if (INDY_call714 != null)
+            return INDY_call714;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call715;
+    private static MethodHandle INDY_call715 () throws Throwable {
+        if (INDY_call715 != null)
+            return INDY_call715;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call716;
+    private static MethodHandle INDY_call716 () throws Throwable {
+        if (INDY_call716 != null)
+            return INDY_call716;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call717;
+    private static MethodHandle INDY_call717 () throws Throwable {
+        if (INDY_call717 != null)
+            return INDY_call717;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call718;
+    private static MethodHandle INDY_call718 () throws Throwable {
+        if (INDY_call718 != null)
+            return INDY_call718;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call719;
+    private static MethodHandle INDY_call719 () throws Throwable {
+        if (INDY_call719 != null)
+            return INDY_call719;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call720;
+    private static MethodHandle INDY_call720 () throws Throwable {
+        if (INDY_call720 != null)
+            return INDY_call720;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call721;
+    private static MethodHandle INDY_call721 () throws Throwable {
+        if (INDY_call721 != null)
+            return INDY_call721;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call722;
+    private static MethodHandle INDY_call722 () throws Throwable {
+        if (INDY_call722 != null)
+            return INDY_call722;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call723;
+    private static MethodHandle INDY_call723 () throws Throwable {
+        if (INDY_call723 != null)
+            return INDY_call723;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call724;
+    private static MethodHandle INDY_call724 () throws Throwable {
+        if (INDY_call724 != null)
+            return INDY_call724;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call725;
+    private static MethodHandle INDY_call725 () throws Throwable {
+        if (INDY_call725 != null)
+            return INDY_call725;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call726;
+    private static MethodHandle INDY_call726 () throws Throwable {
+        if (INDY_call726 != null)
+            return INDY_call726;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call727;
+    private static MethodHandle INDY_call727 () throws Throwable {
+        if (INDY_call727 != null)
+            return INDY_call727;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call728;
+    private static MethodHandle INDY_call728 () throws Throwable {
+        if (INDY_call728 != null)
+            return INDY_call728;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call729;
+    private static MethodHandle INDY_call729 () throws Throwable {
+        if (INDY_call729 != null)
+            return INDY_call729;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call730;
+    private static MethodHandle INDY_call730 () throws Throwable {
+        if (INDY_call730 != null)
+            return INDY_call730;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call731;
+    private static MethodHandle INDY_call731 () throws Throwable {
+        if (INDY_call731 != null)
+            return INDY_call731;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call732;
+    private static MethodHandle INDY_call732 () throws Throwable {
+        if (INDY_call732 != null)
+            return INDY_call732;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call733;
+    private static MethodHandle INDY_call733 () throws Throwable {
+        if (INDY_call733 != null)
+            return INDY_call733;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call734;
+    private static MethodHandle INDY_call734 () throws Throwable {
+        if (INDY_call734 != null)
+            return INDY_call734;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call735;
+    private static MethodHandle INDY_call735 () throws Throwable {
+        if (INDY_call735 != null)
+            return INDY_call735;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call736;
+    private static MethodHandle INDY_call736 () throws Throwable {
+        if (INDY_call736 != null)
+            return INDY_call736;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call737;
+    private static MethodHandle INDY_call737 () throws Throwable {
+        if (INDY_call737 != null)
+            return INDY_call737;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call738;
+    private static MethodHandle INDY_call738 () throws Throwable {
+        if (INDY_call738 != null)
+            return INDY_call738;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call739;
+    private static MethodHandle INDY_call739 () throws Throwable {
+        if (INDY_call739 != null)
+            return INDY_call739;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call740;
+    private static MethodHandle INDY_call740 () throws Throwable {
+        if (INDY_call740 != null)
+            return INDY_call740;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call741;
+    private static MethodHandle INDY_call741 () throws Throwable {
+        if (INDY_call741 != null)
+            return INDY_call741;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call742;
+    private static MethodHandle INDY_call742 () throws Throwable {
+        if (INDY_call742 != null)
+            return INDY_call742;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call743;
+    private static MethodHandle INDY_call743 () throws Throwable {
+        if (INDY_call743 != null)
+            return INDY_call743;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call744;
+    private static MethodHandle INDY_call744 () throws Throwable {
+        if (INDY_call744 != null)
+            return INDY_call744;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call745;
+    private static MethodHandle INDY_call745 () throws Throwable {
+        if (INDY_call745 != null)
+            return INDY_call745;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call746;
+    private static MethodHandle INDY_call746 () throws Throwable {
+        if (INDY_call746 != null)
+            return INDY_call746;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call747;
+    private static MethodHandle INDY_call747 () throws Throwable {
+        if (INDY_call747 != null)
+            return INDY_call747;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call748;
+    private static MethodHandle INDY_call748 () throws Throwable {
+        if (INDY_call748 != null)
+            return INDY_call748;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call749;
+    private static MethodHandle INDY_call749 () throws Throwable {
+        if (INDY_call749 != null)
+            return INDY_call749;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call750;
+    private static MethodHandle INDY_call750 () throws Throwable {
+        if (INDY_call750 != null)
+            return INDY_call750;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call751;
+    private static MethodHandle INDY_call751 () throws Throwable {
+        if (INDY_call751 != null)
+            return INDY_call751;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call752;
+    private static MethodHandle INDY_call752 () throws Throwable {
+        if (INDY_call752 != null)
+            return INDY_call752;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call753;
+    private static MethodHandle INDY_call753 () throws Throwable {
+        if (INDY_call753 != null)
+            return INDY_call753;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call754;
+    private static MethodHandle INDY_call754 () throws Throwable {
+        if (INDY_call754 != null)
+            return INDY_call754;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call755;
+    private static MethodHandle INDY_call755 () throws Throwable {
+        if (INDY_call755 != null)
+            return INDY_call755;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call756;
+    private static MethodHandle INDY_call756 () throws Throwable {
+        if (INDY_call756 != null)
+            return INDY_call756;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call757;
+    private static MethodHandle INDY_call757 () throws Throwable {
+        if (INDY_call757 != null)
+            return INDY_call757;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call758;
+    private static MethodHandle INDY_call758 () throws Throwable {
+        if (INDY_call758 != null)
+            return INDY_call758;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call759;
+    private static MethodHandle INDY_call759 () throws Throwable {
+        if (INDY_call759 != null)
+            return INDY_call759;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call760;
+    private static MethodHandle INDY_call760 () throws Throwable {
+        if (INDY_call760 != null)
+            return INDY_call760;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call761;
+    private static MethodHandle INDY_call761 () throws Throwable {
+        if (INDY_call761 != null)
+            return INDY_call761;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call762;
+    private static MethodHandle INDY_call762 () throws Throwable {
+        if (INDY_call762 != null)
+            return INDY_call762;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call763;
+    private static MethodHandle INDY_call763 () throws Throwable {
+        if (INDY_call763 != null)
+            return INDY_call763;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call764;
+    private static MethodHandle INDY_call764 () throws Throwable {
+        if (INDY_call764 != null)
+            return INDY_call764;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call765;
+    private static MethodHandle INDY_call765 () throws Throwable {
+        if (INDY_call765 != null)
+            return INDY_call765;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call766;
+    private static MethodHandle INDY_call766 () throws Throwable {
+        if (INDY_call766 != null)
+            return INDY_call766;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call767;
+    private static MethodHandle INDY_call767 () throws Throwable {
+        if (INDY_call767 != null)
+            return INDY_call767;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call768;
+    private static MethodHandle INDY_call768 () throws Throwable {
+        if (INDY_call768 != null)
+            return INDY_call768;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call769;
+    private static MethodHandle INDY_call769 () throws Throwable {
+        if (INDY_call769 != null)
+            return INDY_call769;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call770;
+    private static MethodHandle INDY_call770 () throws Throwable {
+        if (INDY_call770 != null)
+            return INDY_call770;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call771;
+    private static MethodHandle INDY_call771 () throws Throwable {
+        if (INDY_call771 != null)
+            return INDY_call771;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call772;
+    private static MethodHandle INDY_call772 () throws Throwable {
+        if (INDY_call772 != null)
+            return INDY_call772;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call773;
+    private static MethodHandle INDY_call773 () throws Throwable {
+        if (INDY_call773 != null)
+            return INDY_call773;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call774;
+    private static MethodHandle INDY_call774 () throws Throwable {
+        if (INDY_call774 != null)
+            return INDY_call774;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call775;
+    private static MethodHandle INDY_call775 () throws Throwable {
+        if (INDY_call775 != null)
+            return INDY_call775;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call776;
+    private static MethodHandle INDY_call776 () throws Throwable {
+        if (INDY_call776 != null)
+            return INDY_call776;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call777;
+    private static MethodHandle INDY_call777 () throws Throwable {
+        if (INDY_call777 != null)
+            return INDY_call777;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call778;
+    private static MethodHandle INDY_call778 () throws Throwable {
+        if (INDY_call778 != null)
+            return INDY_call778;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call779;
+    private static MethodHandle INDY_call779 () throws Throwable {
+        if (INDY_call779 != null)
+            return INDY_call779;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call780;
+    private static MethodHandle INDY_call780 () throws Throwable {
+        if (INDY_call780 != null)
+            return INDY_call780;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call781;
+    private static MethodHandle INDY_call781 () throws Throwable {
+        if (INDY_call781 != null)
+            return INDY_call781;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call782;
+    private static MethodHandle INDY_call782 () throws Throwable {
+        if (INDY_call782 != null)
+            return INDY_call782;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call783;
+    private static MethodHandle INDY_call783 () throws Throwable {
+        if (INDY_call783 != null)
+            return INDY_call783;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call784;
+    private static MethodHandle INDY_call784 () throws Throwable {
+        if (INDY_call784 != null)
+            return INDY_call784;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call785;
+    private static MethodHandle INDY_call785 () throws Throwable {
+        if (INDY_call785 != null)
+            return INDY_call785;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call786;
+    private static MethodHandle INDY_call786 () throws Throwable {
+        if (INDY_call786 != null)
+            return INDY_call786;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call787;
+    private static MethodHandle INDY_call787 () throws Throwable {
+        if (INDY_call787 != null)
+            return INDY_call787;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call788;
+    private static MethodHandle INDY_call788 () throws Throwable {
+        if (INDY_call788 != null)
+            return INDY_call788;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call789;
+    private static MethodHandle INDY_call789 () throws Throwable {
+        if (INDY_call789 != null)
+            return INDY_call789;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call790;
+    private static MethodHandle INDY_call790 () throws Throwable {
+        if (INDY_call790 != null)
+            return INDY_call790;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call791;
+    private static MethodHandle INDY_call791 () throws Throwable {
+        if (INDY_call791 != null)
+            return INDY_call791;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call792;
+    private static MethodHandle INDY_call792 () throws Throwable {
+        if (INDY_call792 != null)
+            return INDY_call792;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call793;
+    private static MethodHandle INDY_call793 () throws Throwable {
+        if (INDY_call793 != null)
+            return INDY_call793;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call794;
+    private static MethodHandle INDY_call794 () throws Throwable {
+        if (INDY_call794 != null)
+            return INDY_call794;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call795;
+    private static MethodHandle INDY_call795 () throws Throwable {
+        if (INDY_call795 != null)
+            return INDY_call795;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call796;
+    private static MethodHandle INDY_call796 () throws Throwable {
+        if (INDY_call796 != null)
+            return INDY_call796;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call797;
+    private static MethodHandle INDY_call797 () throws Throwable {
+        if (INDY_call797 != null)
+            return INDY_call797;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call798;
+    private static MethodHandle INDY_call798 () throws Throwable {
+        if (INDY_call798 != null)
+            return INDY_call798;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call799;
+    private static MethodHandle INDY_call799 () throws Throwable {
+        if (INDY_call799 != null)
+            return INDY_call799;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call800;
+    private static MethodHandle INDY_call800 () throws Throwable {
+        if (INDY_call800 != null)
+            return INDY_call800;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call801;
+    private static MethodHandle INDY_call801 () throws Throwable {
+        if (INDY_call801 != null)
+            return INDY_call801;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call802;
+    private static MethodHandle INDY_call802 () throws Throwable {
+        if (INDY_call802 != null)
+            return INDY_call802;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call803;
+    private static MethodHandle INDY_call803 () throws Throwable {
+        if (INDY_call803 != null)
+            return INDY_call803;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call804;
+    private static MethodHandle INDY_call804 () throws Throwable {
+        if (INDY_call804 != null)
+            return INDY_call804;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call805;
+    private static MethodHandle INDY_call805 () throws Throwable {
+        if (INDY_call805 != null)
+            return INDY_call805;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call806;
+    private static MethodHandle INDY_call806 () throws Throwable {
+        if (INDY_call806 != null)
+            return INDY_call806;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call807;
+    private static MethodHandle INDY_call807 () throws Throwable {
+        if (INDY_call807 != null)
+            return INDY_call807;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call808;
+    private static MethodHandle INDY_call808 () throws Throwable {
+        if (INDY_call808 != null)
+            return INDY_call808;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call809;
+    private static MethodHandle INDY_call809 () throws Throwable {
+        if (INDY_call809 != null)
+            return INDY_call809;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call810;
+    private static MethodHandle INDY_call810 () throws Throwable {
+        if (INDY_call810 != null)
+            return INDY_call810;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call811;
+    private static MethodHandle INDY_call811 () throws Throwable {
+        if (INDY_call811 != null)
+            return INDY_call811;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call812;
+    private static MethodHandle INDY_call812 () throws Throwable {
+        if (INDY_call812 != null)
+            return INDY_call812;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call813;
+    private static MethodHandle INDY_call813 () throws Throwable {
+        if (INDY_call813 != null)
+            return INDY_call813;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call814;
+    private static MethodHandle INDY_call814 () throws Throwable {
+        if (INDY_call814 != null)
+            return INDY_call814;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call815;
+    private static MethodHandle INDY_call815 () throws Throwable {
+        if (INDY_call815 != null)
+            return INDY_call815;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call816;
+    private static MethodHandle INDY_call816 () throws Throwable {
+        if (INDY_call816 != null)
+            return INDY_call816;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call817;
+    private static MethodHandle INDY_call817 () throws Throwable {
+        if (INDY_call817 != null)
+            return INDY_call817;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call818;
+    private static MethodHandle INDY_call818 () throws Throwable {
+        if (INDY_call818 != null)
+            return INDY_call818;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call819;
+    private static MethodHandle INDY_call819 () throws Throwable {
+        if (INDY_call819 != null)
+            return INDY_call819;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call820;
+    private static MethodHandle INDY_call820 () throws Throwable {
+        if (INDY_call820 != null)
+            return INDY_call820;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call821;
+    private static MethodHandle INDY_call821 () throws Throwable {
+        if (INDY_call821 != null)
+            return INDY_call821;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call822;
+    private static MethodHandle INDY_call822 () throws Throwable {
+        if (INDY_call822 != null)
+            return INDY_call822;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call823;
+    private static MethodHandle INDY_call823 () throws Throwable {
+        if (INDY_call823 != null)
+            return INDY_call823;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call824;
+    private static MethodHandle INDY_call824 () throws Throwable {
+        if (INDY_call824 != null)
+            return INDY_call824;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call825;
+    private static MethodHandle INDY_call825 () throws Throwable {
+        if (INDY_call825 != null)
+            return INDY_call825;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call826;
+    private static MethodHandle INDY_call826 () throws Throwable {
+        if (INDY_call826 != null)
+            return INDY_call826;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call827;
+    private static MethodHandle INDY_call827 () throws Throwable {
+        if (INDY_call827 != null)
+            return INDY_call827;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call828;
+    private static MethodHandle INDY_call828 () throws Throwable {
+        if (INDY_call828 != null)
+            return INDY_call828;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call829;
+    private static MethodHandle INDY_call829 () throws Throwable {
+        if (INDY_call829 != null)
+            return INDY_call829;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call830;
+    private static MethodHandle INDY_call830 () throws Throwable {
+        if (INDY_call830 != null)
+            return INDY_call830;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call831;
+    private static MethodHandle INDY_call831 () throws Throwable {
+        if (INDY_call831 != null)
+            return INDY_call831;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call832;
+    private static MethodHandle INDY_call832 () throws Throwable {
+        if (INDY_call832 != null)
+            return INDY_call832;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call833;
+    private static MethodHandle INDY_call833 () throws Throwable {
+        if (INDY_call833 != null)
+            return INDY_call833;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call834;
+    private static MethodHandle INDY_call834 () throws Throwable {
+        if (INDY_call834 != null)
+            return INDY_call834;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call835;
+    private static MethodHandle INDY_call835 () throws Throwable {
+        if (INDY_call835 != null)
+            return INDY_call835;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call836;
+    private static MethodHandle INDY_call836 () throws Throwable {
+        if (INDY_call836 != null)
+            return INDY_call836;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call837;
+    private static MethodHandle INDY_call837 () throws Throwable {
+        if (INDY_call837 != null)
+            return INDY_call837;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call838;
+    private static MethodHandle INDY_call838 () throws Throwable {
+        if (INDY_call838 != null)
+            return INDY_call838;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call839;
+    private static MethodHandle INDY_call839 () throws Throwable {
+        if (INDY_call839 != null)
+            return INDY_call839;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call840;
+    private static MethodHandle INDY_call840 () throws Throwable {
+        if (INDY_call840 != null)
+            return INDY_call840;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call841;
+    private static MethodHandle INDY_call841 () throws Throwable {
+        if (INDY_call841 != null)
+            return INDY_call841;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call842;
+    private static MethodHandle INDY_call842 () throws Throwable {
+        if (INDY_call842 != null)
+            return INDY_call842;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call843;
+    private static MethodHandle INDY_call843 () throws Throwable {
+        if (INDY_call843 != null)
+            return INDY_call843;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call844;
+    private static MethodHandle INDY_call844 () throws Throwable {
+        if (INDY_call844 != null)
+            return INDY_call844;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call845;
+    private static MethodHandle INDY_call845 () throws Throwable {
+        if (INDY_call845 != null)
+            return INDY_call845;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call846;
+    private static MethodHandle INDY_call846 () throws Throwable {
+        if (INDY_call846 != null)
+            return INDY_call846;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call847;
+    private static MethodHandle INDY_call847 () throws Throwable {
+        if (INDY_call847 != null)
+            return INDY_call847;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call848;
+    private static MethodHandle INDY_call848 () throws Throwable {
+        if (INDY_call848 != null)
+            return INDY_call848;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call849;
+    private static MethodHandle INDY_call849 () throws Throwable {
+        if (INDY_call849 != null)
+            return INDY_call849;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call850;
+    private static MethodHandle INDY_call850 () throws Throwable {
+        if (INDY_call850 != null)
+            return INDY_call850;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call851;
+    private static MethodHandle INDY_call851 () throws Throwable {
+        if (INDY_call851 != null)
+            return INDY_call851;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call852;
+    private static MethodHandle INDY_call852 () throws Throwable {
+        if (INDY_call852 != null)
+            return INDY_call852;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call853;
+    private static MethodHandle INDY_call853 () throws Throwable {
+        if (INDY_call853 != null)
+            return INDY_call853;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call854;
+    private static MethodHandle INDY_call854 () throws Throwable {
+        if (INDY_call854 != null)
+            return INDY_call854;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call855;
+    private static MethodHandle INDY_call855 () throws Throwable {
+        if (INDY_call855 != null)
+            return INDY_call855;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call856;
+    private static MethodHandle INDY_call856 () throws Throwable {
+        if (INDY_call856 != null)
+            return INDY_call856;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call857;
+    private static MethodHandle INDY_call857 () throws Throwable {
+        if (INDY_call857 != null)
+            return INDY_call857;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call858;
+    private static MethodHandle INDY_call858 () throws Throwable {
+        if (INDY_call858 != null)
+            return INDY_call858;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call859;
+    private static MethodHandle INDY_call859 () throws Throwable {
+        if (INDY_call859 != null)
+            return INDY_call859;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call860;
+    private static MethodHandle INDY_call860 () throws Throwable {
+        if (INDY_call860 != null)
+            return INDY_call860;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call861;
+    private static MethodHandle INDY_call861 () throws Throwable {
+        if (INDY_call861 != null)
+            return INDY_call861;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call862;
+    private static MethodHandle INDY_call862 () throws Throwable {
+        if (INDY_call862 != null)
+            return INDY_call862;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call863;
+    private static MethodHandle INDY_call863 () throws Throwable {
+        if (INDY_call863 != null)
+            return INDY_call863;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call864;
+    private static MethodHandle INDY_call864 () throws Throwable {
+        if (INDY_call864 != null)
+            return INDY_call864;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call865;
+    private static MethodHandle INDY_call865 () throws Throwable {
+        if (INDY_call865 != null)
+            return INDY_call865;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call866;
+    private static MethodHandle INDY_call866 () throws Throwable {
+        if (INDY_call866 != null)
+            return INDY_call866;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call867;
+    private static MethodHandle INDY_call867 () throws Throwable {
+        if (INDY_call867 != null)
+            return INDY_call867;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call868;
+    private static MethodHandle INDY_call868 () throws Throwable {
+        if (INDY_call868 != null)
+            return INDY_call868;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call869;
+    private static MethodHandle INDY_call869 () throws Throwable {
+        if (INDY_call869 != null)
+            return INDY_call869;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call870;
+    private static MethodHandle INDY_call870 () throws Throwable {
+        if (INDY_call870 != null)
+            return INDY_call870;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call871;
+    private static MethodHandle INDY_call871 () throws Throwable {
+        if (INDY_call871 != null)
+            return INDY_call871;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call872;
+    private static MethodHandle INDY_call872 () throws Throwable {
+        if (INDY_call872 != null)
+            return INDY_call872;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call873;
+    private static MethodHandle INDY_call873 () throws Throwable {
+        if (INDY_call873 != null)
+            return INDY_call873;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call874;
+    private static MethodHandle INDY_call874 () throws Throwable {
+        if (INDY_call874 != null)
+            return INDY_call874;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call875;
+    private static MethodHandle INDY_call875 () throws Throwable {
+        if (INDY_call875 != null)
+            return INDY_call875;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call876;
+    private static MethodHandle INDY_call876 () throws Throwable {
+        if (INDY_call876 != null)
+            return INDY_call876;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call877;
+    private static MethodHandle INDY_call877 () throws Throwable {
+        if (INDY_call877 != null)
+            return INDY_call877;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call878;
+    private static MethodHandle INDY_call878 () throws Throwable {
+        if (INDY_call878 != null)
+            return INDY_call878;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call879;
+    private static MethodHandle INDY_call879 () throws Throwable {
+        if (INDY_call879 != null)
+            return INDY_call879;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call880;
+    private static MethodHandle INDY_call880 () throws Throwable {
+        if (INDY_call880 != null)
+            return INDY_call880;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call881;
+    private static MethodHandle INDY_call881 () throws Throwable {
+        if (INDY_call881 != null)
+            return INDY_call881;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call882;
+    private static MethodHandle INDY_call882 () throws Throwable {
+        if (INDY_call882 != null)
+            return INDY_call882;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call883;
+    private static MethodHandle INDY_call883 () throws Throwable {
+        if (INDY_call883 != null)
+            return INDY_call883;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call884;
+    private static MethodHandle INDY_call884 () throws Throwable {
+        if (INDY_call884 != null)
+            return INDY_call884;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call885;
+    private static MethodHandle INDY_call885 () throws Throwable {
+        if (INDY_call885 != null)
+            return INDY_call885;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call886;
+    private static MethodHandle INDY_call886 () throws Throwable {
+        if (INDY_call886 != null)
+            return INDY_call886;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call887;
+    private static MethodHandle INDY_call887 () throws Throwable {
+        if (INDY_call887 != null)
+            return INDY_call887;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call888;
+    private static MethodHandle INDY_call888 () throws Throwable {
+        if (INDY_call888 != null)
+            return INDY_call888;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call889;
+    private static MethodHandle INDY_call889 () throws Throwable {
+        if (INDY_call889 != null)
+            return INDY_call889;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call890;
+    private static MethodHandle INDY_call890 () throws Throwable {
+        if (INDY_call890 != null)
+            return INDY_call890;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call891;
+    private static MethodHandle INDY_call891 () throws Throwable {
+        if (INDY_call891 != null)
+            return INDY_call891;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call892;
+    private static MethodHandle INDY_call892 () throws Throwable {
+        if (INDY_call892 != null)
+            return INDY_call892;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call893;
+    private static MethodHandle INDY_call893 () throws Throwable {
+        if (INDY_call893 != null)
+            return INDY_call893;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call894;
+    private static MethodHandle INDY_call894 () throws Throwable {
+        if (INDY_call894 != null)
+            return INDY_call894;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call895;
+    private static MethodHandle INDY_call895 () throws Throwable {
+        if (INDY_call895 != null)
+            return INDY_call895;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call896;
+    private static MethodHandle INDY_call896 () throws Throwable {
+        if (INDY_call896 != null)
+            return INDY_call896;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call897;
+    private static MethodHandle INDY_call897 () throws Throwable {
+        if (INDY_call897 != null)
+            return INDY_call897;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call898;
+    private static MethodHandle INDY_call898 () throws Throwable {
+        if (INDY_call898 != null)
+            return INDY_call898;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call899;
+    private static MethodHandle INDY_call899 () throws Throwable {
+        if (INDY_call899 != null)
+            return INDY_call899;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call900;
+    private static MethodHandle INDY_call900 () throws Throwable {
+        if (INDY_call900 != null)
+            return INDY_call900;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call901;
+    private static MethodHandle INDY_call901 () throws Throwable {
+        if (INDY_call901 != null)
+            return INDY_call901;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call902;
+    private static MethodHandle INDY_call902 () throws Throwable {
+        if (INDY_call902 != null)
+            return INDY_call902;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call903;
+    private static MethodHandle INDY_call903 () throws Throwable {
+        if (INDY_call903 != null)
+            return INDY_call903;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call904;
+    private static MethodHandle INDY_call904 () throws Throwable {
+        if (INDY_call904 != null)
+            return INDY_call904;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call905;
+    private static MethodHandle INDY_call905 () throws Throwable {
+        if (INDY_call905 != null)
+            return INDY_call905;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call906;
+    private static MethodHandle INDY_call906 () throws Throwable {
+        if (INDY_call906 != null)
+            return INDY_call906;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call907;
+    private static MethodHandle INDY_call907 () throws Throwable {
+        if (INDY_call907 != null)
+            return INDY_call907;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call908;
+    private static MethodHandle INDY_call908 () throws Throwable {
+        if (INDY_call908 != null)
+            return INDY_call908;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call909;
+    private static MethodHandle INDY_call909 () throws Throwable {
+        if (INDY_call909 != null)
+            return INDY_call909;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call910;
+    private static MethodHandle INDY_call910 () throws Throwable {
+        if (INDY_call910 != null)
+            return INDY_call910;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call911;
+    private static MethodHandle INDY_call911 () throws Throwable {
+        if (INDY_call911 != null)
+            return INDY_call911;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call912;
+    private static MethodHandle INDY_call912 () throws Throwable {
+        if (INDY_call912 != null)
+            return INDY_call912;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call913;
+    private static MethodHandle INDY_call913 () throws Throwable {
+        if (INDY_call913 != null)
+            return INDY_call913;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call914;
+    private static MethodHandle INDY_call914 () throws Throwable {
+        if (INDY_call914 != null)
+            return INDY_call914;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call915;
+    private static MethodHandle INDY_call915 () throws Throwable {
+        if (INDY_call915 != null)
+            return INDY_call915;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call916;
+    private static MethodHandle INDY_call916 () throws Throwable {
+        if (INDY_call916 != null)
+            return INDY_call916;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call917;
+    private static MethodHandle INDY_call917 () throws Throwable {
+        if (INDY_call917 != null)
+            return INDY_call917;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call918;
+    private static MethodHandle INDY_call918 () throws Throwable {
+        if (INDY_call918 != null)
+            return INDY_call918;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call919;
+    private static MethodHandle INDY_call919 () throws Throwable {
+        if (INDY_call919 != null)
+            return INDY_call919;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call920;
+    private static MethodHandle INDY_call920 () throws Throwable {
+        if (INDY_call920 != null)
+            return INDY_call920;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call921;
+    private static MethodHandle INDY_call921 () throws Throwable {
+        if (INDY_call921 != null)
+            return INDY_call921;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call922;
+    private static MethodHandle INDY_call922 () throws Throwable {
+        if (INDY_call922 != null)
+            return INDY_call922;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call923;
+    private static MethodHandle INDY_call923 () throws Throwable {
+        if (INDY_call923 != null)
+            return INDY_call923;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call924;
+    private static MethodHandle INDY_call924 () throws Throwable {
+        if (INDY_call924 != null)
+            return INDY_call924;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call925;
+    private static MethodHandle INDY_call925 () throws Throwable {
+        if (INDY_call925 != null)
+            return INDY_call925;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call926;
+    private static MethodHandle INDY_call926 () throws Throwable {
+        if (INDY_call926 != null)
+            return INDY_call926;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call927;
+    private static MethodHandle INDY_call927 () throws Throwable {
+        if (INDY_call927 != null)
+            return INDY_call927;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call928;
+    private static MethodHandle INDY_call928 () throws Throwable {
+        if (INDY_call928 != null)
+            return INDY_call928;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call929;
+    private static MethodHandle INDY_call929 () throws Throwable {
+        if (INDY_call929 != null)
+            return INDY_call929;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call930;
+    private static MethodHandle INDY_call930 () throws Throwable {
+        if (INDY_call930 != null)
+            return INDY_call930;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call931;
+    private static MethodHandle INDY_call931 () throws Throwable {
+        if (INDY_call931 != null)
+            return INDY_call931;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call932;
+    private static MethodHandle INDY_call932 () throws Throwable {
+        if (INDY_call932 != null)
+            return INDY_call932;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call933;
+    private static MethodHandle INDY_call933 () throws Throwable {
+        if (INDY_call933 != null)
+            return INDY_call933;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call934;
+    private static MethodHandle INDY_call934 () throws Throwable {
+        if (INDY_call934 != null)
+            return INDY_call934;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call935;
+    private static MethodHandle INDY_call935 () throws Throwable {
+        if (INDY_call935 != null)
+            return INDY_call935;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call936;
+    private static MethodHandle INDY_call936 () throws Throwable {
+        if (INDY_call936 != null)
+            return INDY_call936;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call937;
+    private static MethodHandle INDY_call937 () throws Throwable {
+        if (INDY_call937 != null)
+            return INDY_call937;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call938;
+    private static MethodHandle INDY_call938 () throws Throwable {
+        if (INDY_call938 != null)
+            return INDY_call938;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call939;
+    private static MethodHandle INDY_call939 () throws Throwable {
+        if (INDY_call939 != null)
+            return INDY_call939;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call940;
+    private static MethodHandle INDY_call940 () throws Throwable {
+        if (INDY_call940 != null)
+            return INDY_call940;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call941;
+    private static MethodHandle INDY_call941 () throws Throwable {
+        if (INDY_call941 != null)
+            return INDY_call941;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call942;
+    private static MethodHandle INDY_call942 () throws Throwable {
+        if (INDY_call942 != null)
+            return INDY_call942;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call943;
+    private static MethodHandle INDY_call943 () throws Throwable {
+        if (INDY_call943 != null)
+            return INDY_call943;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call944;
+    private static MethodHandle INDY_call944 () throws Throwable {
+        if (INDY_call944 != null)
+            return INDY_call944;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call945;
+    private static MethodHandle INDY_call945 () throws Throwable {
+        if (INDY_call945 != null)
+            return INDY_call945;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call946;
+    private static MethodHandle INDY_call946 () throws Throwable {
+        if (INDY_call946 != null)
+            return INDY_call946;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call947;
+    private static MethodHandle INDY_call947 () throws Throwable {
+        if (INDY_call947 != null)
+            return INDY_call947;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call948;
+    private static MethodHandle INDY_call948 () throws Throwable {
+        if (INDY_call948 != null)
+            return INDY_call948;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call949;
+    private static MethodHandle INDY_call949 () throws Throwable {
+        if (INDY_call949 != null)
+            return INDY_call949;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call950;
+    private static MethodHandle INDY_call950 () throws Throwable {
+        if (INDY_call950 != null)
+            return INDY_call950;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call951;
+    private static MethodHandle INDY_call951 () throws Throwable {
+        if (INDY_call951 != null)
+            return INDY_call951;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call952;
+    private static MethodHandle INDY_call952 () throws Throwable {
+        if (INDY_call952 != null)
+            return INDY_call952;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call953;
+    private static MethodHandle INDY_call953 () throws Throwable {
+        if (INDY_call953 != null)
+            return INDY_call953;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call954;
+    private static MethodHandle INDY_call954 () throws Throwable {
+        if (INDY_call954 != null)
+            return INDY_call954;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call955;
+    private static MethodHandle INDY_call955 () throws Throwable {
+        if (INDY_call955 != null)
+            return INDY_call955;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call956;
+    private static MethodHandle INDY_call956 () throws Throwable {
+        if (INDY_call956 != null)
+            return INDY_call956;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call957;
+    private static MethodHandle INDY_call957 () throws Throwable {
+        if (INDY_call957 != null)
+            return INDY_call957;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call958;
+    private static MethodHandle INDY_call958 () throws Throwable {
+        if (INDY_call958 != null)
+            return INDY_call958;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call959;
+    private static MethodHandle INDY_call959 () throws Throwable {
+        if (INDY_call959 != null)
+            return INDY_call959;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call960;
+    private static MethodHandle INDY_call960 () throws Throwable {
+        if (INDY_call960 != null)
+            return INDY_call960;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call961;
+    private static MethodHandle INDY_call961 () throws Throwable {
+        if (INDY_call961 != null)
+            return INDY_call961;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call962;
+    private static MethodHandle INDY_call962 () throws Throwable {
+        if (INDY_call962 != null)
+            return INDY_call962;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call963;
+    private static MethodHandle INDY_call963 () throws Throwable {
+        if (INDY_call963 != null)
+            return INDY_call963;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call964;
+    private static MethodHandle INDY_call964 () throws Throwable {
+        if (INDY_call964 != null)
+            return INDY_call964;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call965;
+    private static MethodHandle INDY_call965 () throws Throwable {
+        if (INDY_call965 != null)
+            return INDY_call965;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call966;
+    private static MethodHandle INDY_call966 () throws Throwable {
+        if (INDY_call966 != null)
+            return INDY_call966;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call967;
+    private static MethodHandle INDY_call967 () throws Throwable {
+        if (INDY_call967 != null)
+            return INDY_call967;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call968;
+    private static MethodHandle INDY_call968 () throws Throwable {
+        if (INDY_call968 != null)
+            return INDY_call968;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call969;
+    private static MethodHandle INDY_call969 () throws Throwable {
+        if (INDY_call969 != null)
+            return INDY_call969;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call970;
+    private static MethodHandle INDY_call970 () throws Throwable {
+        if (INDY_call970 != null)
+            return INDY_call970;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call971;
+    private static MethodHandle INDY_call971 () throws Throwable {
+        if (INDY_call971 != null)
+            return INDY_call971;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call972;
+    private static MethodHandle INDY_call972 () throws Throwable {
+        if (INDY_call972 != null)
+            return INDY_call972;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call973;
+    private static MethodHandle INDY_call973 () throws Throwable {
+        if (INDY_call973 != null)
+            return INDY_call973;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call974;
+    private static MethodHandle INDY_call974 () throws Throwable {
+        if (INDY_call974 != null)
+            return INDY_call974;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call975;
+    private static MethodHandle INDY_call975 () throws Throwable {
+        if (INDY_call975 != null)
+            return INDY_call975;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call976;
+    private static MethodHandle INDY_call976 () throws Throwable {
+        if (INDY_call976 != null)
+            return INDY_call976;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call977;
+    private static MethodHandle INDY_call977 () throws Throwable {
+        if (INDY_call977 != null)
+            return INDY_call977;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call978;
+    private static MethodHandle INDY_call978 () throws Throwable {
+        if (INDY_call978 != null)
+            return INDY_call978;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call979;
+    private static MethodHandle INDY_call979 () throws Throwable {
+        if (INDY_call979 != null)
+            return INDY_call979;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call980;
+    private static MethodHandle INDY_call980 () throws Throwable {
+        if (INDY_call980 != null)
+            return INDY_call980;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call981;
+    private static MethodHandle INDY_call981 () throws Throwable {
+        if (INDY_call981 != null)
+            return INDY_call981;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call982;
+    private static MethodHandle INDY_call982 () throws Throwable {
+        if (INDY_call982 != null)
+            return INDY_call982;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call983;
+    private static MethodHandle INDY_call983 () throws Throwable {
+        if (INDY_call983 != null)
+            return INDY_call983;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call984;
+    private static MethodHandle INDY_call984 () throws Throwable {
+        if (INDY_call984 != null)
+            return INDY_call984;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call985;
+    private static MethodHandle INDY_call985 () throws Throwable {
+        if (INDY_call985 != null)
+            return INDY_call985;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call986;
+    private static MethodHandle INDY_call986 () throws Throwable {
+        if (INDY_call986 != null)
+            return INDY_call986;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call987;
+    private static MethodHandle INDY_call987 () throws Throwable {
+        if (INDY_call987 != null)
+            return INDY_call987;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call988;
+    private static MethodHandle INDY_call988 () throws Throwable {
+        if (INDY_call988 != null)
+            return INDY_call988;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call989;
+    private static MethodHandle INDY_call989 () throws Throwable {
+        if (INDY_call989 != null)
+            return INDY_call989;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call990;
+    private static MethodHandle INDY_call990 () throws Throwable {
+        if (INDY_call990 != null)
+            return INDY_call990;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call991;
+    private static MethodHandle INDY_call991 () throws Throwable {
+        if (INDY_call991 != null)
+            return INDY_call991;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call992;
+    private static MethodHandle INDY_call992 () throws Throwable {
+        if (INDY_call992 != null)
+            return INDY_call992;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call993;
+    private static MethodHandle INDY_call993 () throws Throwable {
+        if (INDY_call993 != null)
+            return INDY_call993;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call994;
+    private static MethodHandle INDY_call994 () throws Throwable {
+        if (INDY_call994 != null)
+            return INDY_call994;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call995;
+    private static MethodHandle INDY_call995 () throws Throwable {
+        if (INDY_call995 != null)
+            return INDY_call995;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call996;
+    private static MethodHandle INDY_call996 () throws Throwable {
+        if (INDY_call996 != null)
+            return INDY_call996;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call997;
+    private static MethodHandle INDY_call997 () throws Throwable {
+        if (INDY_call997 != null)
+            return INDY_call997;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call998;
+    private static MethodHandle INDY_call998 () throws Throwable {
+        if (INDY_call998 != null)
+            return INDY_call998;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+    private static MethodHandle INDY_call999;
+    private static MethodHandle INDY_call999 () throws Throwable {
+        if (INDY_call999 != null)
+            return INDY_call999;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+
+    public boolean runThread(int threadNum) throws Throwable {
+        final INDIFY_Test x = this;
+        final String s = "todo el mundo";
+        final int i = 123;
+
+        Stresser stresser = createStresser();
+
+        stresser.start(1);
+        while ( stresser.continueExecution() ) {
+            stresser.iteration();
+
+            long e;
+            do {
+                e = _expectedTargetCalls.get();
+            } while ( ! _expectedTargetCalls.compareAndSet(e, e + 1000) );
+
+            Object o0 = (Object) INDY_call0 ().invokeExact(x, s, i);
+            Object o1 = (Object) INDY_call1 ().invokeExact(x, s, i);
+            Object o2 = (Object) INDY_call2 ().invokeExact(x, s, i);
+            Object o3 = (Object) INDY_call3 ().invokeExact(x, s, i);
+            Object o4 = (Object) INDY_call4 ().invokeExact(x, s, i);
+            Object o5 = (Object) INDY_call5 ().invokeExact(x, s, i);
+            Object o6 = (Object) INDY_call6 ().invokeExact(x, s, i);
+            Object o7 = (Object) INDY_call7 ().invokeExact(x, s, i);
+            Object o8 = (Object) INDY_call8 ().invokeExact(x, s, i);
+            Object o9 = (Object) INDY_call9 ().invokeExact(x, s, i);
+            Object o10 = (Object) INDY_call10 ().invokeExact(x, s, i);
+            Object o11 = (Object) INDY_call11 ().invokeExact(x, s, i);
+            Object o12 = (Object) INDY_call12 ().invokeExact(x, s, i);
+            Object o13 = (Object) INDY_call13 ().invokeExact(x, s, i);
+            Object o14 = (Object) INDY_call14 ().invokeExact(x, s, i);
+            Object o15 = (Object) INDY_call15 ().invokeExact(x, s, i);
+            Object o16 = (Object) INDY_call16 ().invokeExact(x, s, i);
+            Object o17 = (Object) INDY_call17 ().invokeExact(x, s, i);
+            Object o18 = (Object) INDY_call18 ().invokeExact(x, s, i);
+            Object o19 = (Object) INDY_call19 ().invokeExact(x, s, i);
+            Object o20 = (Object) INDY_call20 ().invokeExact(x, s, i);
+            Object o21 = (Object) INDY_call21 ().invokeExact(x, s, i);
+            Object o22 = (Object) INDY_call22 ().invokeExact(x, s, i);
+            Object o23 = (Object) INDY_call23 ().invokeExact(x, s, i);
+            Object o24 = (Object) INDY_call24 ().invokeExact(x, s, i);
+            Object o25 = (Object) INDY_call25 ().invokeExact(x, s, i);
+            Object o26 = (Object) INDY_call26 ().invokeExact(x, s, i);
+            Object o27 = (Object) INDY_call27 ().invokeExact(x, s, i);
+            Object o28 = (Object) INDY_call28 ().invokeExact(x, s, i);
+            Object o29 = (Object) INDY_call29 ().invokeExact(x, s, i);
+            Object o30 = (Object) INDY_call30 ().invokeExact(x, s, i);
+            Object o31 = (Object) INDY_call31 ().invokeExact(x, s, i);
+            Object o32 = (Object) INDY_call32 ().invokeExact(x, s, i);
+            Object o33 = (Object) INDY_call33 ().invokeExact(x, s, i);
+            Object o34 = (Object) INDY_call34 ().invokeExact(x, s, i);
+            Object o35 = (Object) INDY_call35 ().invokeExact(x, s, i);
+            Object o36 = (Object) INDY_call36 ().invokeExact(x, s, i);
+            Object o37 = (Object) INDY_call37 ().invokeExact(x, s, i);
+            Object o38 = (Object) INDY_call38 ().invokeExact(x, s, i);
+            Object o39 = (Object) INDY_call39 ().invokeExact(x, s, i);
+            Object o40 = (Object) INDY_call40 ().invokeExact(x, s, i);
+            Object o41 = (Object) INDY_call41 ().invokeExact(x, s, i);
+            Object o42 = (Object) INDY_call42 ().invokeExact(x, s, i);
+            Object o43 = (Object) INDY_call43 ().invokeExact(x, s, i);
+            Object o44 = (Object) INDY_call44 ().invokeExact(x, s, i);
+            Object o45 = (Object) INDY_call45 ().invokeExact(x, s, i);
+            Object o46 = (Object) INDY_call46 ().invokeExact(x, s, i);
+            Object o47 = (Object) INDY_call47 ().invokeExact(x, s, i);
+            Object o48 = (Object) INDY_call48 ().invokeExact(x, s, i);
+            Object o49 = (Object) INDY_call49 ().invokeExact(x, s, i);
+            Object o50 = (Object) INDY_call50 ().invokeExact(x, s, i);
+            Object o51 = (Object) INDY_call51 ().invokeExact(x, s, i);
+            Object o52 = (Object) INDY_call52 ().invokeExact(x, s, i);
+            Object o53 = (Object) INDY_call53 ().invokeExact(x, s, i);
+            Object o54 = (Object) INDY_call54 ().invokeExact(x, s, i);
+            Object o55 = (Object) INDY_call55 ().invokeExact(x, s, i);
+            Object o56 = (Object) INDY_call56 ().invokeExact(x, s, i);
+            Object o57 = (Object) INDY_call57 ().invokeExact(x, s, i);
+            Object o58 = (Object) INDY_call58 ().invokeExact(x, s, i);
+            Object o59 = (Object) INDY_call59 ().invokeExact(x, s, i);
+            Object o60 = (Object) INDY_call60 ().invokeExact(x, s, i);
+            Object o61 = (Object) INDY_call61 ().invokeExact(x, s, i);
+            Object o62 = (Object) INDY_call62 ().invokeExact(x, s, i);
+            Object o63 = (Object) INDY_call63 ().invokeExact(x, s, i);
+            Object o64 = (Object) INDY_call64 ().invokeExact(x, s, i);
+            Object o65 = (Object) INDY_call65 ().invokeExact(x, s, i);
+            Object o66 = (Object) INDY_call66 ().invokeExact(x, s, i);
+            Object o67 = (Object) INDY_call67 ().invokeExact(x, s, i);
+            Object o68 = (Object) INDY_call68 ().invokeExact(x, s, i);
+            Object o69 = (Object) INDY_call69 ().invokeExact(x, s, i);
+            Object o70 = (Object) INDY_call70 ().invokeExact(x, s, i);
+            Object o71 = (Object) INDY_call71 ().invokeExact(x, s, i);
+            Object o72 = (Object) INDY_call72 ().invokeExact(x, s, i);
+            Object o73 = (Object) INDY_call73 ().invokeExact(x, s, i);
+            Object o74 = (Object) INDY_call74 ().invokeExact(x, s, i);
+            Object o75 = (Object) INDY_call75 ().invokeExact(x, s, i);
+            Object o76 = (Object) INDY_call76 ().invokeExact(x, s, i);
+            Object o77 = (Object) INDY_call77 ().invokeExact(x, s, i);
+            Object o78 = (Object) INDY_call78 ().invokeExact(x, s, i);
+            Object o79 = (Object) INDY_call79 ().invokeExact(x, s, i);
+            Object o80 = (Object) INDY_call80 ().invokeExact(x, s, i);
+            Object o81 = (Object) INDY_call81 ().invokeExact(x, s, i);
+            Object o82 = (Object) INDY_call82 ().invokeExact(x, s, i);
+            Object o83 = (Object) INDY_call83 ().invokeExact(x, s, i);
+            Object o84 = (Object) INDY_call84 ().invokeExact(x, s, i);
+            Object o85 = (Object) INDY_call85 ().invokeExact(x, s, i);
+            Object o86 = (Object) INDY_call86 ().invokeExact(x, s, i);
+            Object o87 = (Object) INDY_call87 ().invokeExact(x, s, i);
+            Object o88 = (Object) INDY_call88 ().invokeExact(x, s, i);
+            Object o89 = (Object) INDY_call89 ().invokeExact(x, s, i);
+            Object o90 = (Object) INDY_call90 ().invokeExact(x, s, i);
+            Object o91 = (Object) INDY_call91 ().invokeExact(x, s, i);
+            Object o92 = (Object) INDY_call92 ().invokeExact(x, s, i);
+            Object o93 = (Object) INDY_call93 ().invokeExact(x, s, i);
+            Object o94 = (Object) INDY_call94 ().invokeExact(x, s, i);
+            Object o95 = (Object) INDY_call95 ().invokeExact(x, s, i);
+            Object o96 = (Object) INDY_call96 ().invokeExact(x, s, i);
+            Object o97 = (Object) INDY_call97 ().invokeExact(x, s, i);
+            Object o98 = (Object) INDY_call98 ().invokeExact(x, s, i);
+            Object o99 = (Object) INDY_call99 ().invokeExact(x, s, i);
+            Object o100 = (Object) INDY_call100 ().invokeExact(x, s, i);
+            Object o101 = (Object) INDY_call101 ().invokeExact(x, s, i);
+            Object o102 = (Object) INDY_call102 ().invokeExact(x, s, i);
+            Object o103 = (Object) INDY_call103 ().invokeExact(x, s, i);
+            Object o104 = (Object) INDY_call104 ().invokeExact(x, s, i);
+            Object o105 = (Object) INDY_call105 ().invokeExact(x, s, i);
+            Object o106 = (Object) INDY_call106 ().invokeExact(x, s, i);
+            Object o107 = (Object) INDY_call107 ().invokeExact(x, s, i);
+            Object o108 = (Object) INDY_call108 ().invokeExact(x, s, i);
+            Object o109 = (Object) INDY_call109 ().invokeExact(x, s, i);
+            Object o110 = (Object) INDY_call110 ().invokeExact(x, s, i);
+            Object o111 = (Object) INDY_call111 ().invokeExact(x, s, i);
+            Object o112 = (Object) INDY_call112 ().invokeExact(x, s, i);
+            Object o113 = (Object) INDY_call113 ().invokeExact(x, s, i);
+            Object o114 = (Object) INDY_call114 ().invokeExact(x, s, i);
+            Object o115 = (Object) INDY_call115 ().invokeExact(x, s, i);
+            Object o116 = (Object) INDY_call116 ().invokeExact(x, s, i);
+            Object o117 = (Object) INDY_call117 ().invokeExact(x, s, i);
+            Object o118 = (Object) INDY_call118 ().invokeExact(x, s, i);
+            Object o119 = (Object) INDY_call119 ().invokeExact(x, s, i);
+            Object o120 = (Object) INDY_call120 ().invokeExact(x, s, i);
+            Object o121 = (Object) INDY_call121 ().invokeExact(x, s, i);
+            Object o122 = (Object) INDY_call122 ().invokeExact(x, s, i);
+            Object o123 = (Object) INDY_call123 ().invokeExact(x, s, i);
+            Object o124 = (Object) INDY_call124 ().invokeExact(x, s, i);
+            Object o125 = (Object) INDY_call125 ().invokeExact(x, s, i);
+            Object o126 = (Object) INDY_call126 ().invokeExact(x, s, i);
+            Object o127 = (Object) INDY_call127 ().invokeExact(x, s, i);
+            Object o128 = (Object) INDY_call128 ().invokeExact(x, s, i);
+            Object o129 = (Object) INDY_call129 ().invokeExact(x, s, i);
+            Object o130 = (Object) INDY_call130 ().invokeExact(x, s, i);
+            Object o131 = (Object) INDY_call131 ().invokeExact(x, s, i);
+            Object o132 = (Object) INDY_call132 ().invokeExact(x, s, i);
+            Object o133 = (Object) INDY_call133 ().invokeExact(x, s, i);
+            Object o134 = (Object) INDY_call134 ().invokeExact(x, s, i);
+            Object o135 = (Object) INDY_call135 ().invokeExact(x, s, i);
+            Object o136 = (Object) INDY_call136 ().invokeExact(x, s, i);
+            Object o137 = (Object) INDY_call137 ().invokeExact(x, s, i);
+            Object o138 = (Object) INDY_call138 ().invokeExact(x, s, i);
+            Object o139 = (Object) INDY_call139 ().invokeExact(x, s, i);
+            Object o140 = (Object) INDY_call140 ().invokeExact(x, s, i);
+            Object o141 = (Object) INDY_call141 ().invokeExact(x, s, i);
+            Object o142 = (Object) INDY_call142 ().invokeExact(x, s, i);
+            Object o143 = (Object) INDY_call143 ().invokeExact(x, s, i);
+            Object o144 = (Object) INDY_call144 ().invokeExact(x, s, i);
+            Object o145 = (Object) INDY_call145 ().invokeExact(x, s, i);
+            Object o146 = (Object) INDY_call146 ().invokeExact(x, s, i);
+            Object o147 = (Object) INDY_call147 ().invokeExact(x, s, i);
+            Object o148 = (Object) INDY_call148 ().invokeExact(x, s, i);
+            Object o149 = (Object) INDY_call149 ().invokeExact(x, s, i);
+            Object o150 = (Object) INDY_call150 ().invokeExact(x, s, i);
+            Object o151 = (Object) INDY_call151 ().invokeExact(x, s, i);
+            Object o152 = (Object) INDY_call152 ().invokeExact(x, s, i);
+            Object o153 = (Object) INDY_call153 ().invokeExact(x, s, i);
+            Object o154 = (Object) INDY_call154 ().invokeExact(x, s, i);
+            Object o155 = (Object) INDY_call155 ().invokeExact(x, s, i);
+            Object o156 = (Object) INDY_call156 ().invokeExact(x, s, i);
+            Object o157 = (Object) INDY_call157 ().invokeExact(x, s, i);
+            Object o158 = (Object) INDY_call158 ().invokeExact(x, s, i);
+            Object o159 = (Object) INDY_call159 ().invokeExact(x, s, i);
+            Object o160 = (Object) INDY_call160 ().invokeExact(x, s, i);
+            Object o161 = (Object) INDY_call161 ().invokeExact(x, s, i);
+            Object o162 = (Object) INDY_call162 ().invokeExact(x, s, i);
+            Object o163 = (Object) INDY_call163 ().invokeExact(x, s, i);
+            Object o164 = (Object) INDY_call164 ().invokeExact(x, s, i);
+            Object o165 = (Object) INDY_call165 ().invokeExact(x, s, i);
+            Object o166 = (Object) INDY_call166 ().invokeExact(x, s, i);
+            Object o167 = (Object) INDY_call167 ().invokeExact(x, s, i);
+            Object o168 = (Object) INDY_call168 ().invokeExact(x, s, i);
+            Object o169 = (Object) INDY_call169 ().invokeExact(x, s, i);
+            Object o170 = (Object) INDY_call170 ().invokeExact(x, s, i);
+            Object o171 = (Object) INDY_call171 ().invokeExact(x, s, i);
+            Object o172 = (Object) INDY_call172 ().invokeExact(x, s, i);
+            Object o173 = (Object) INDY_call173 ().invokeExact(x, s, i);
+            Object o174 = (Object) INDY_call174 ().invokeExact(x, s, i);
+            Object o175 = (Object) INDY_call175 ().invokeExact(x, s, i);
+            Object o176 = (Object) INDY_call176 ().invokeExact(x, s, i);
+            Object o177 = (Object) INDY_call177 ().invokeExact(x, s, i);
+            Object o178 = (Object) INDY_call178 ().invokeExact(x, s, i);
+            Object o179 = (Object) INDY_call179 ().invokeExact(x, s, i);
+            Object o180 = (Object) INDY_call180 ().invokeExact(x, s, i);
+            Object o181 = (Object) INDY_call181 ().invokeExact(x, s, i);
+            Object o182 = (Object) INDY_call182 ().invokeExact(x, s, i);
+            Object o183 = (Object) INDY_call183 ().invokeExact(x, s, i);
+            Object o184 = (Object) INDY_call184 ().invokeExact(x, s, i);
+            Object o185 = (Object) INDY_call185 ().invokeExact(x, s, i);
+            Object o186 = (Object) INDY_call186 ().invokeExact(x, s, i);
+            Object o187 = (Object) INDY_call187 ().invokeExact(x, s, i);
+            Object o188 = (Object) INDY_call188 ().invokeExact(x, s, i);
+            Object o189 = (Object) INDY_call189 ().invokeExact(x, s, i);
+            Object o190 = (Object) INDY_call190 ().invokeExact(x, s, i);
+            Object o191 = (Object) INDY_call191 ().invokeExact(x, s, i);
+            Object o192 = (Object) INDY_call192 ().invokeExact(x, s, i);
+            Object o193 = (Object) INDY_call193 ().invokeExact(x, s, i);
+            Object o194 = (Object) INDY_call194 ().invokeExact(x, s, i);
+            Object o195 = (Object) INDY_call195 ().invokeExact(x, s, i);
+            Object o196 = (Object) INDY_call196 ().invokeExact(x, s, i);
+            Object o197 = (Object) INDY_call197 ().invokeExact(x, s, i);
+            Object o198 = (Object) INDY_call198 ().invokeExact(x, s, i);
+            Object o199 = (Object) INDY_call199 ().invokeExact(x, s, i);
+            Object o200 = (Object) INDY_call200 ().invokeExact(x, s, i);
+            Object o201 = (Object) INDY_call201 ().invokeExact(x, s, i);
+            Object o202 = (Object) INDY_call202 ().invokeExact(x, s, i);
+            Object o203 = (Object) INDY_call203 ().invokeExact(x, s, i);
+            Object o204 = (Object) INDY_call204 ().invokeExact(x, s, i);
+            Object o205 = (Object) INDY_call205 ().invokeExact(x, s, i);
+            Object o206 = (Object) INDY_call206 ().invokeExact(x, s, i);
+            Object o207 = (Object) INDY_call207 ().invokeExact(x, s, i);
+            Object o208 = (Object) INDY_call208 ().invokeExact(x, s, i);
+            Object o209 = (Object) INDY_call209 ().invokeExact(x, s, i);
+            Object o210 = (Object) INDY_call210 ().invokeExact(x, s, i);
+            Object o211 = (Object) INDY_call211 ().invokeExact(x, s, i);
+            Object o212 = (Object) INDY_call212 ().invokeExact(x, s, i);
+            Object o213 = (Object) INDY_call213 ().invokeExact(x, s, i);
+            Object o214 = (Object) INDY_call214 ().invokeExact(x, s, i);
+            Object o215 = (Object) INDY_call215 ().invokeExact(x, s, i);
+            Object o216 = (Object) INDY_call216 ().invokeExact(x, s, i);
+            Object o217 = (Object) INDY_call217 ().invokeExact(x, s, i);
+            Object o218 = (Object) INDY_call218 ().invokeExact(x, s, i);
+            Object o219 = (Object) INDY_call219 ().invokeExact(x, s, i);
+            Object o220 = (Object) INDY_call220 ().invokeExact(x, s, i);
+            Object o221 = (Object) INDY_call221 ().invokeExact(x, s, i);
+            Object o222 = (Object) INDY_call222 ().invokeExact(x, s, i);
+            Object o223 = (Object) INDY_call223 ().invokeExact(x, s, i);
+            Object o224 = (Object) INDY_call224 ().invokeExact(x, s, i);
+            Object o225 = (Object) INDY_call225 ().invokeExact(x, s, i);
+            Object o226 = (Object) INDY_call226 ().invokeExact(x, s, i);
+            Object o227 = (Object) INDY_call227 ().invokeExact(x, s, i);
+            Object o228 = (Object) INDY_call228 ().invokeExact(x, s, i);
+            Object o229 = (Object) INDY_call229 ().invokeExact(x, s, i);
+            Object o230 = (Object) INDY_call230 ().invokeExact(x, s, i);
+            Object o231 = (Object) INDY_call231 ().invokeExact(x, s, i);
+            Object o232 = (Object) INDY_call232 ().invokeExact(x, s, i);
+            Object o233 = (Object) INDY_call233 ().invokeExact(x, s, i);
+            Object o234 = (Object) INDY_call234 ().invokeExact(x, s, i);
+            Object o235 = (Object) INDY_call235 ().invokeExact(x, s, i);
+            Object o236 = (Object) INDY_call236 ().invokeExact(x, s, i);
+            Object o237 = (Object) INDY_call237 ().invokeExact(x, s, i);
+            Object o238 = (Object) INDY_call238 ().invokeExact(x, s, i);
+            Object o239 = (Object) INDY_call239 ().invokeExact(x, s, i);
+            Object o240 = (Object) INDY_call240 ().invokeExact(x, s, i);
+            Object o241 = (Object) INDY_call241 ().invokeExact(x, s, i);
+            Object o242 = (Object) INDY_call242 ().invokeExact(x, s, i);
+            Object o243 = (Object) INDY_call243 ().invokeExact(x, s, i);
+            Object o244 = (Object) INDY_call244 ().invokeExact(x, s, i);
+            Object o245 = (Object) INDY_call245 ().invokeExact(x, s, i);
+            Object o246 = (Object) INDY_call246 ().invokeExact(x, s, i);
+            Object o247 = (Object) INDY_call247 ().invokeExact(x, s, i);
+            Object o248 = (Object) INDY_call248 ().invokeExact(x, s, i);
+            Object o249 = (Object) INDY_call249 ().invokeExact(x, s, i);
+            Object o250 = (Object) INDY_call250 ().invokeExact(x, s, i);
+            Object o251 = (Object) INDY_call251 ().invokeExact(x, s, i);
+            Object o252 = (Object) INDY_call252 ().invokeExact(x, s, i);
+            Object o253 = (Object) INDY_call253 ().invokeExact(x, s, i);
+            Object o254 = (Object) INDY_call254 ().invokeExact(x, s, i);
+            Object o255 = (Object) INDY_call255 ().invokeExact(x, s, i);
+            Object o256 = (Object) INDY_call256 ().invokeExact(x, s, i);
+            Object o257 = (Object) INDY_call257 ().invokeExact(x, s, i);
+            Object o258 = (Object) INDY_call258 ().invokeExact(x, s, i);
+            Object o259 = (Object) INDY_call259 ().invokeExact(x, s, i);
+            Object o260 = (Object) INDY_call260 ().invokeExact(x, s, i);
+            Object o261 = (Object) INDY_call261 ().invokeExact(x, s, i);
+            Object o262 = (Object) INDY_call262 ().invokeExact(x, s, i);
+            Object o263 = (Object) INDY_call263 ().invokeExact(x, s, i);
+            Object o264 = (Object) INDY_call264 ().invokeExact(x, s, i);
+            Object o265 = (Object) INDY_call265 ().invokeExact(x, s, i);
+            Object o266 = (Object) INDY_call266 ().invokeExact(x, s, i);
+            Object o267 = (Object) INDY_call267 ().invokeExact(x, s, i);
+            Object o268 = (Object) INDY_call268 ().invokeExact(x, s, i);
+            Object o269 = (Object) INDY_call269 ().invokeExact(x, s, i);
+            Object o270 = (Object) INDY_call270 ().invokeExact(x, s, i);
+            Object o271 = (Object) INDY_call271 ().invokeExact(x, s, i);
+            Object o272 = (Object) INDY_call272 ().invokeExact(x, s, i);
+            Object o273 = (Object) INDY_call273 ().invokeExact(x, s, i);
+            Object o274 = (Object) INDY_call274 ().invokeExact(x, s, i);
+            Object o275 = (Object) INDY_call275 ().invokeExact(x, s, i);
+            Object o276 = (Object) INDY_call276 ().invokeExact(x, s, i);
+            Object o277 = (Object) INDY_call277 ().invokeExact(x, s, i);
+            Object o278 = (Object) INDY_call278 ().invokeExact(x, s, i);
+            Object o279 = (Object) INDY_call279 ().invokeExact(x, s, i);
+            Object o280 = (Object) INDY_call280 ().invokeExact(x, s, i);
+            Object o281 = (Object) INDY_call281 ().invokeExact(x, s, i);
+            Object o282 = (Object) INDY_call282 ().invokeExact(x, s, i);
+            Object o283 = (Object) INDY_call283 ().invokeExact(x, s, i);
+            Object o284 = (Object) INDY_call284 ().invokeExact(x, s, i);
+            Object o285 = (Object) INDY_call285 ().invokeExact(x, s, i);
+            Object o286 = (Object) INDY_call286 ().invokeExact(x, s, i);
+            Object o287 = (Object) INDY_call287 ().invokeExact(x, s, i);
+            Object o288 = (Object) INDY_call288 ().invokeExact(x, s, i);
+            Object o289 = (Object) INDY_call289 ().invokeExact(x, s, i);
+            Object o290 = (Object) INDY_call290 ().invokeExact(x, s, i);
+            Object o291 = (Object) INDY_call291 ().invokeExact(x, s, i);
+            Object o292 = (Object) INDY_call292 ().invokeExact(x, s, i);
+            Object o293 = (Object) INDY_call293 ().invokeExact(x, s, i);
+            Object o294 = (Object) INDY_call294 ().invokeExact(x, s, i);
+            Object o295 = (Object) INDY_call295 ().invokeExact(x, s, i);
+            Object o296 = (Object) INDY_call296 ().invokeExact(x, s, i);
+            Object o297 = (Object) INDY_call297 ().invokeExact(x, s, i);
+            Object o298 = (Object) INDY_call298 ().invokeExact(x, s, i);
+            Object o299 = (Object) INDY_call299 ().invokeExact(x, s, i);
+            Object o300 = (Object) INDY_call300 ().invokeExact(x, s, i);
+            Object o301 = (Object) INDY_call301 ().invokeExact(x, s, i);
+            Object o302 = (Object) INDY_call302 ().invokeExact(x, s, i);
+            Object o303 = (Object) INDY_call303 ().invokeExact(x, s, i);
+            Object o304 = (Object) INDY_call304 ().invokeExact(x, s, i);
+            Object o305 = (Object) INDY_call305 ().invokeExact(x, s, i);
+            Object o306 = (Object) INDY_call306 ().invokeExact(x, s, i);
+            Object o307 = (Object) INDY_call307 ().invokeExact(x, s, i);
+            Object o308 = (Object) INDY_call308 ().invokeExact(x, s, i);
+            Object o309 = (Object) INDY_call309 ().invokeExact(x, s, i);
+            Object o310 = (Object) INDY_call310 ().invokeExact(x, s, i);
+            Object o311 = (Object) INDY_call311 ().invokeExact(x, s, i);
+            Object o312 = (Object) INDY_call312 ().invokeExact(x, s, i);
+            Object o313 = (Object) INDY_call313 ().invokeExact(x, s, i);
+            Object o314 = (Object) INDY_call314 ().invokeExact(x, s, i);
+            Object o315 = (Object) INDY_call315 ().invokeExact(x, s, i);
+            Object o316 = (Object) INDY_call316 ().invokeExact(x, s, i);
+            Object o317 = (Object) INDY_call317 ().invokeExact(x, s, i);
+            Object o318 = (Object) INDY_call318 ().invokeExact(x, s, i);
+            Object o319 = (Object) INDY_call319 ().invokeExact(x, s, i);
+            Object o320 = (Object) INDY_call320 ().invokeExact(x, s, i);
+            Object o321 = (Object) INDY_call321 ().invokeExact(x, s, i);
+            Object o322 = (Object) INDY_call322 ().invokeExact(x, s, i);
+            Object o323 = (Object) INDY_call323 ().invokeExact(x, s, i);
+            Object o324 = (Object) INDY_call324 ().invokeExact(x, s, i);
+            Object o325 = (Object) INDY_call325 ().invokeExact(x, s, i);
+            Object o326 = (Object) INDY_call326 ().invokeExact(x, s, i);
+            Object o327 = (Object) INDY_call327 ().invokeExact(x, s, i);
+            Object o328 = (Object) INDY_call328 ().invokeExact(x, s, i);
+            Object o329 = (Object) INDY_call329 ().invokeExact(x, s, i);
+            Object o330 = (Object) INDY_call330 ().invokeExact(x, s, i);
+            Object o331 = (Object) INDY_call331 ().invokeExact(x, s, i);
+            Object o332 = (Object) INDY_call332 ().invokeExact(x, s, i);
+            Object o333 = (Object) INDY_call333 ().invokeExact(x, s, i);
+            Object o334 = (Object) INDY_call334 ().invokeExact(x, s, i);
+            Object o335 = (Object) INDY_call335 ().invokeExact(x, s, i);
+            Object o336 = (Object) INDY_call336 ().invokeExact(x, s, i);
+            Object o337 = (Object) INDY_call337 ().invokeExact(x, s, i);
+            Object o338 = (Object) INDY_call338 ().invokeExact(x, s, i);
+            Object o339 = (Object) INDY_call339 ().invokeExact(x, s, i);
+            Object o340 = (Object) INDY_call340 ().invokeExact(x, s, i);
+            Object o341 = (Object) INDY_call341 ().invokeExact(x, s, i);
+            Object o342 = (Object) INDY_call342 ().invokeExact(x, s, i);
+            Object o343 = (Object) INDY_call343 ().invokeExact(x, s, i);
+            Object o344 = (Object) INDY_call344 ().invokeExact(x, s, i);
+            Object o345 = (Object) INDY_call345 ().invokeExact(x, s, i);
+            Object o346 = (Object) INDY_call346 ().invokeExact(x, s, i);
+            Object o347 = (Object) INDY_call347 ().invokeExact(x, s, i);
+            Object o348 = (Object) INDY_call348 ().invokeExact(x, s, i);
+            Object o349 = (Object) INDY_call349 ().invokeExact(x, s, i);
+            Object o350 = (Object) INDY_call350 ().invokeExact(x, s, i);
+            Object o351 = (Object) INDY_call351 ().invokeExact(x, s, i);
+            Object o352 = (Object) INDY_call352 ().invokeExact(x, s, i);
+            Object o353 = (Object) INDY_call353 ().invokeExact(x, s, i);
+            Object o354 = (Object) INDY_call354 ().invokeExact(x, s, i);
+            Object o355 = (Object) INDY_call355 ().invokeExact(x, s, i);
+            Object o356 = (Object) INDY_call356 ().invokeExact(x, s, i);
+            Object o357 = (Object) INDY_call357 ().invokeExact(x, s, i);
+            Object o358 = (Object) INDY_call358 ().invokeExact(x, s, i);
+            Object o359 = (Object) INDY_call359 ().invokeExact(x, s, i);
+            Object o360 = (Object) INDY_call360 ().invokeExact(x, s, i);
+            Object o361 = (Object) INDY_call361 ().invokeExact(x, s, i);
+            Object o362 = (Object) INDY_call362 ().invokeExact(x, s, i);
+            Object o363 = (Object) INDY_call363 ().invokeExact(x, s, i);
+            Object o364 = (Object) INDY_call364 ().invokeExact(x, s, i);
+            Object o365 = (Object) INDY_call365 ().invokeExact(x, s, i);
+            Object o366 = (Object) INDY_call366 ().invokeExact(x, s, i);
+            Object o367 = (Object) INDY_call367 ().invokeExact(x, s, i);
+            Object o368 = (Object) INDY_call368 ().invokeExact(x, s, i);
+            Object o369 = (Object) INDY_call369 ().invokeExact(x, s, i);
+            Object o370 = (Object) INDY_call370 ().invokeExact(x, s, i);
+            Object o371 = (Object) INDY_call371 ().invokeExact(x, s, i);
+            Object o372 = (Object) INDY_call372 ().invokeExact(x, s, i);
+            Object o373 = (Object) INDY_call373 ().invokeExact(x, s, i);
+            Object o374 = (Object) INDY_call374 ().invokeExact(x, s, i);
+            Object o375 = (Object) INDY_call375 ().invokeExact(x, s, i);
+            Object o376 = (Object) INDY_call376 ().invokeExact(x, s, i);
+            Object o377 = (Object) INDY_call377 ().invokeExact(x, s, i);
+            Object o378 = (Object) INDY_call378 ().invokeExact(x, s, i);
+            Object o379 = (Object) INDY_call379 ().invokeExact(x, s, i);
+            Object o380 = (Object) INDY_call380 ().invokeExact(x, s, i);
+            Object o381 = (Object) INDY_call381 ().invokeExact(x, s, i);
+            Object o382 = (Object) INDY_call382 ().invokeExact(x, s, i);
+            Object o383 = (Object) INDY_call383 ().invokeExact(x, s, i);
+            Object o384 = (Object) INDY_call384 ().invokeExact(x, s, i);
+            Object o385 = (Object) INDY_call385 ().invokeExact(x, s, i);
+            Object o386 = (Object) INDY_call386 ().invokeExact(x, s, i);
+            Object o387 = (Object) INDY_call387 ().invokeExact(x, s, i);
+            Object o388 = (Object) INDY_call388 ().invokeExact(x, s, i);
+            Object o389 = (Object) INDY_call389 ().invokeExact(x, s, i);
+            Object o390 = (Object) INDY_call390 ().invokeExact(x, s, i);
+            Object o391 = (Object) INDY_call391 ().invokeExact(x, s, i);
+            Object o392 = (Object) INDY_call392 ().invokeExact(x, s, i);
+            Object o393 = (Object) INDY_call393 ().invokeExact(x, s, i);
+            Object o394 = (Object) INDY_call394 ().invokeExact(x, s, i);
+            Object o395 = (Object) INDY_call395 ().invokeExact(x, s, i);
+            Object o396 = (Object) INDY_call396 ().invokeExact(x, s, i);
+            Object o397 = (Object) INDY_call397 ().invokeExact(x, s, i);
+            Object o398 = (Object) INDY_call398 ().invokeExact(x, s, i);
+            Object o399 = (Object) INDY_call399 ().invokeExact(x, s, i);
+            Object o400 = (Object) INDY_call400 ().invokeExact(x, s, i);
+            Object o401 = (Object) INDY_call401 ().invokeExact(x, s, i);
+            Object o402 = (Object) INDY_call402 ().invokeExact(x, s, i);
+            Object o403 = (Object) INDY_call403 ().invokeExact(x, s, i);
+            Object o404 = (Object) INDY_call404 ().invokeExact(x, s, i);
+            Object o405 = (Object) INDY_call405 ().invokeExact(x, s, i);
+            Object o406 = (Object) INDY_call406 ().invokeExact(x, s, i);
+            Object o407 = (Object) INDY_call407 ().invokeExact(x, s, i);
+            Object o408 = (Object) INDY_call408 ().invokeExact(x, s, i);
+            Object o409 = (Object) INDY_call409 ().invokeExact(x, s, i);
+            Object o410 = (Object) INDY_call410 ().invokeExact(x, s, i);
+            Object o411 = (Object) INDY_call411 ().invokeExact(x, s, i);
+            Object o412 = (Object) INDY_call412 ().invokeExact(x, s, i);
+            Object o413 = (Object) INDY_call413 ().invokeExact(x, s, i);
+            Object o414 = (Object) INDY_call414 ().invokeExact(x, s, i);
+            Object o415 = (Object) INDY_call415 ().invokeExact(x, s, i);
+            Object o416 = (Object) INDY_call416 ().invokeExact(x, s, i);
+            Object o417 = (Object) INDY_call417 ().invokeExact(x, s, i);
+            Object o418 = (Object) INDY_call418 ().invokeExact(x, s, i);
+            Object o419 = (Object) INDY_call419 ().invokeExact(x, s, i);
+            Object o420 = (Object) INDY_call420 ().invokeExact(x, s, i);
+            Object o421 = (Object) INDY_call421 ().invokeExact(x, s, i);
+            Object o422 = (Object) INDY_call422 ().invokeExact(x, s, i);
+            Object o423 = (Object) INDY_call423 ().invokeExact(x, s, i);
+            Object o424 = (Object) INDY_call424 ().invokeExact(x, s, i);
+            Object o425 = (Object) INDY_call425 ().invokeExact(x, s, i);
+            Object o426 = (Object) INDY_call426 ().invokeExact(x, s, i);
+            Object o427 = (Object) INDY_call427 ().invokeExact(x, s, i);
+            Object o428 = (Object) INDY_call428 ().invokeExact(x, s, i);
+            Object o429 = (Object) INDY_call429 ().invokeExact(x, s, i);
+            Object o430 = (Object) INDY_call430 ().invokeExact(x, s, i);
+            Object o431 = (Object) INDY_call431 ().invokeExact(x, s, i);
+            Object o432 = (Object) INDY_call432 ().invokeExact(x, s, i);
+            Object o433 = (Object) INDY_call433 ().invokeExact(x, s, i);
+            Object o434 = (Object) INDY_call434 ().invokeExact(x, s, i);
+            Object o435 = (Object) INDY_call435 ().invokeExact(x, s, i);
+            Object o436 = (Object) INDY_call436 ().invokeExact(x, s, i);
+            Object o437 = (Object) INDY_call437 ().invokeExact(x, s, i);
+            Object o438 = (Object) INDY_call438 ().invokeExact(x, s, i);
+            Object o439 = (Object) INDY_call439 ().invokeExact(x, s, i);
+            Object o440 = (Object) INDY_call440 ().invokeExact(x, s, i);
+            Object o441 = (Object) INDY_call441 ().invokeExact(x, s, i);
+            Object o442 = (Object) INDY_call442 ().invokeExact(x, s, i);
+            Object o443 = (Object) INDY_call443 ().invokeExact(x, s, i);
+            Object o444 = (Object) INDY_call444 ().invokeExact(x, s, i);
+            Object o445 = (Object) INDY_call445 ().invokeExact(x, s, i);
+            Object o446 = (Object) INDY_call446 ().invokeExact(x, s, i);
+            Object o447 = (Object) INDY_call447 ().invokeExact(x, s, i);
+            Object o448 = (Object) INDY_call448 ().invokeExact(x, s, i);
+            Object o449 = (Object) INDY_call449 ().invokeExact(x, s, i);
+            Object o450 = (Object) INDY_call450 ().invokeExact(x, s, i);
+            Object o451 = (Object) INDY_call451 ().invokeExact(x, s, i);
+            Object o452 = (Object) INDY_call452 ().invokeExact(x, s, i);
+            Object o453 = (Object) INDY_call453 ().invokeExact(x, s, i);
+            Object o454 = (Object) INDY_call454 ().invokeExact(x, s, i);
+            Object o455 = (Object) INDY_call455 ().invokeExact(x, s, i);
+            Object o456 = (Object) INDY_call456 ().invokeExact(x, s, i);
+            Object o457 = (Object) INDY_call457 ().invokeExact(x, s, i);
+            Object o458 = (Object) INDY_call458 ().invokeExact(x, s, i);
+            Object o459 = (Object) INDY_call459 ().invokeExact(x, s, i);
+            Object o460 = (Object) INDY_call460 ().invokeExact(x, s, i);
+            Object o461 = (Object) INDY_call461 ().invokeExact(x, s, i);
+            Object o462 = (Object) INDY_call462 ().invokeExact(x, s, i);
+            Object o463 = (Object) INDY_call463 ().invokeExact(x, s, i);
+            Object o464 = (Object) INDY_call464 ().invokeExact(x, s, i);
+            Object o465 = (Object) INDY_call465 ().invokeExact(x, s, i);
+            Object o466 = (Object) INDY_call466 ().invokeExact(x, s, i);
+            Object o467 = (Object) INDY_call467 ().invokeExact(x, s, i);
+            Object o468 = (Object) INDY_call468 ().invokeExact(x, s, i);
+            Object o469 = (Object) INDY_call469 ().invokeExact(x, s, i);
+            Object o470 = (Object) INDY_call470 ().invokeExact(x, s, i);
+            Object o471 = (Object) INDY_call471 ().invokeExact(x, s, i);
+            Object o472 = (Object) INDY_call472 ().invokeExact(x, s, i);
+            Object o473 = (Object) INDY_call473 ().invokeExact(x, s, i);
+            Object o474 = (Object) INDY_call474 ().invokeExact(x, s, i);
+            Object o475 = (Object) INDY_call475 ().invokeExact(x, s, i);
+            Object o476 = (Object) INDY_call476 ().invokeExact(x, s, i);
+            Object o477 = (Object) INDY_call477 ().invokeExact(x, s, i);
+            Object o478 = (Object) INDY_call478 ().invokeExact(x, s, i);
+            Object o479 = (Object) INDY_call479 ().invokeExact(x, s, i);
+            Object o480 = (Object) INDY_call480 ().invokeExact(x, s, i);
+            Object o481 = (Object) INDY_call481 ().invokeExact(x, s, i);
+            Object o482 = (Object) INDY_call482 ().invokeExact(x, s, i);
+            Object o483 = (Object) INDY_call483 ().invokeExact(x, s, i);
+            Object o484 = (Object) INDY_call484 ().invokeExact(x, s, i);
+            Object o485 = (Object) INDY_call485 ().invokeExact(x, s, i);
+            Object o486 = (Object) INDY_call486 ().invokeExact(x, s, i);
+            Object o487 = (Object) INDY_call487 ().invokeExact(x, s, i);
+            Object o488 = (Object) INDY_call488 ().invokeExact(x, s, i);
+            Object o489 = (Object) INDY_call489 ().invokeExact(x, s, i);
+            Object o490 = (Object) INDY_call490 ().invokeExact(x, s, i);
+            Object o491 = (Object) INDY_call491 ().invokeExact(x, s, i);
+            Object o492 = (Object) INDY_call492 ().invokeExact(x, s, i);
+            Object o493 = (Object) INDY_call493 ().invokeExact(x, s, i);
+            Object o494 = (Object) INDY_call494 ().invokeExact(x, s, i);
+            Object o495 = (Object) INDY_call495 ().invokeExact(x, s, i);
+            Object o496 = (Object) INDY_call496 ().invokeExact(x, s, i);
+            Object o497 = (Object) INDY_call497 ().invokeExact(x, s, i);
+            Object o498 = (Object) INDY_call498 ().invokeExact(x, s, i);
+            Object o499 = (Object) INDY_call499 ().invokeExact(x, s, i);
+            Object o500 = (Object) INDY_call500 ().invokeExact(x, s, i);
+            Object o501 = (Object) INDY_call501 ().invokeExact(x, s, i);
+            Object o502 = (Object) INDY_call502 ().invokeExact(x, s, i);
+            Object o503 = (Object) INDY_call503 ().invokeExact(x, s, i);
+            Object o504 = (Object) INDY_call504 ().invokeExact(x, s, i);
+            Object o505 = (Object) INDY_call505 ().invokeExact(x, s, i);
+            Object o506 = (Object) INDY_call506 ().invokeExact(x, s, i);
+            Object o507 = (Object) INDY_call507 ().invokeExact(x, s, i);
+            Object o508 = (Object) INDY_call508 ().invokeExact(x, s, i);
+            Object o509 = (Object) INDY_call509 ().invokeExact(x, s, i);
+            Object o510 = (Object) INDY_call510 ().invokeExact(x, s, i);
+            Object o511 = (Object) INDY_call511 ().invokeExact(x, s, i);
+            Object o512 = (Object) INDY_call512 ().invokeExact(x, s, i);
+            Object o513 = (Object) INDY_call513 ().invokeExact(x, s, i);
+            Object o514 = (Object) INDY_call514 ().invokeExact(x, s, i);
+            Object o515 = (Object) INDY_call515 ().invokeExact(x, s, i);
+            Object o516 = (Object) INDY_call516 ().invokeExact(x, s, i);
+            Object o517 = (Object) INDY_call517 ().invokeExact(x, s, i);
+            Object o518 = (Object) INDY_call518 ().invokeExact(x, s, i);
+            Object o519 = (Object) INDY_call519 ().invokeExact(x, s, i);
+            Object o520 = (Object) INDY_call520 ().invokeExact(x, s, i);
+            Object o521 = (Object) INDY_call521 ().invokeExact(x, s, i);
+            Object o522 = (Object) INDY_call522 ().invokeExact(x, s, i);
+            Object o523 = (Object) INDY_call523 ().invokeExact(x, s, i);
+            Object o524 = (Object) INDY_call524 ().invokeExact(x, s, i);
+            Object o525 = (Object) INDY_call525 ().invokeExact(x, s, i);
+            Object o526 = (Object) INDY_call526 ().invokeExact(x, s, i);
+            Object o527 = (Object) INDY_call527 ().invokeExact(x, s, i);
+            Object o528 = (Object) INDY_call528 ().invokeExact(x, s, i);
+            Object o529 = (Object) INDY_call529 ().invokeExact(x, s, i);
+            Object o530 = (Object) INDY_call530 ().invokeExact(x, s, i);
+            Object o531 = (Object) INDY_call531 ().invokeExact(x, s, i);
+            Object o532 = (Object) INDY_call532 ().invokeExact(x, s, i);
+            Object o533 = (Object) INDY_call533 ().invokeExact(x, s, i);
+            Object o534 = (Object) INDY_call534 ().invokeExact(x, s, i);
+            Object o535 = (Object) INDY_call535 ().invokeExact(x, s, i);
+            Object o536 = (Object) INDY_call536 ().invokeExact(x, s, i);
+            Object o537 = (Object) INDY_call537 ().invokeExact(x, s, i);
+            Object o538 = (Object) INDY_call538 ().invokeExact(x, s, i);
+            Object o539 = (Object) INDY_call539 ().invokeExact(x, s, i);
+            Object o540 = (Object) INDY_call540 ().invokeExact(x, s, i);
+            Object o541 = (Object) INDY_call541 ().invokeExact(x, s, i);
+            Object o542 = (Object) INDY_call542 ().invokeExact(x, s, i);
+            Object o543 = (Object) INDY_call543 ().invokeExact(x, s, i);
+            Object o544 = (Object) INDY_call544 ().invokeExact(x, s, i);
+            Object o545 = (Object) INDY_call545 ().invokeExact(x, s, i);
+            Object o546 = (Object) INDY_call546 ().invokeExact(x, s, i);
+            Object o547 = (Object) INDY_call547 ().invokeExact(x, s, i);
+            Object o548 = (Object) INDY_call548 ().invokeExact(x, s, i);
+            Object o549 = (Object) INDY_call549 ().invokeExact(x, s, i);
+            Object o550 = (Object) INDY_call550 ().invokeExact(x, s, i);
+            Object o551 = (Object) INDY_call551 ().invokeExact(x, s, i);
+            Object o552 = (Object) INDY_call552 ().invokeExact(x, s, i);
+            Object o553 = (Object) INDY_call553 ().invokeExact(x, s, i);
+            Object o554 = (Object) INDY_call554 ().invokeExact(x, s, i);
+            Object o555 = (Object) INDY_call555 ().invokeExact(x, s, i);
+            Object o556 = (Object) INDY_call556 ().invokeExact(x, s, i);
+            Object o557 = (Object) INDY_call557 ().invokeExact(x, s, i);
+            Object o558 = (Object) INDY_call558 ().invokeExact(x, s, i);
+            Object o559 = (Object) INDY_call559 ().invokeExact(x, s, i);
+            Object o560 = (Object) INDY_call560 ().invokeExact(x, s, i);
+            Object o561 = (Object) INDY_call561 ().invokeExact(x, s, i);
+            Object o562 = (Object) INDY_call562 ().invokeExact(x, s, i);
+            Object o563 = (Object) INDY_call563 ().invokeExact(x, s, i);
+            Object o564 = (Object) INDY_call564 ().invokeExact(x, s, i);
+            Object o565 = (Object) INDY_call565 ().invokeExact(x, s, i);
+            Object o566 = (Object) INDY_call566 ().invokeExact(x, s, i);
+            Object o567 = (Object) INDY_call567 ().invokeExact(x, s, i);
+            Object o568 = (Object) INDY_call568 ().invokeExact(x, s, i);
+            Object o569 = (Object) INDY_call569 ().invokeExact(x, s, i);
+            Object o570 = (Object) INDY_call570 ().invokeExact(x, s, i);
+            Object o571 = (Object) INDY_call571 ().invokeExact(x, s, i);
+            Object o572 = (Object) INDY_call572 ().invokeExact(x, s, i);
+            Object o573 = (Object) INDY_call573 ().invokeExact(x, s, i);
+            Object o574 = (Object) INDY_call574 ().invokeExact(x, s, i);
+            Object o575 = (Object) INDY_call575 ().invokeExact(x, s, i);
+            Object o576 = (Object) INDY_call576 ().invokeExact(x, s, i);
+            Object o577 = (Object) INDY_call577 ().invokeExact(x, s, i);
+            Object o578 = (Object) INDY_call578 ().invokeExact(x, s, i);
+            Object o579 = (Object) INDY_call579 ().invokeExact(x, s, i);
+            Object o580 = (Object) INDY_call580 ().invokeExact(x, s, i);
+            Object o581 = (Object) INDY_call581 ().invokeExact(x, s, i);
+            Object o582 = (Object) INDY_call582 ().invokeExact(x, s, i);
+            Object o583 = (Object) INDY_call583 ().invokeExact(x, s, i);
+            Object o584 = (Object) INDY_call584 ().invokeExact(x, s, i);
+            Object o585 = (Object) INDY_call585 ().invokeExact(x, s, i);
+            Object o586 = (Object) INDY_call586 ().invokeExact(x, s, i);
+            Object o587 = (Object) INDY_call587 ().invokeExact(x, s, i);
+            Object o588 = (Object) INDY_call588 ().invokeExact(x, s, i);
+            Object o589 = (Object) INDY_call589 ().invokeExact(x, s, i);
+            Object o590 = (Object) INDY_call590 ().invokeExact(x, s, i);
+            Object o591 = (Object) INDY_call591 ().invokeExact(x, s, i);
+            Object o592 = (Object) INDY_call592 ().invokeExact(x, s, i);
+            Object o593 = (Object) INDY_call593 ().invokeExact(x, s, i);
+            Object o594 = (Object) INDY_call594 ().invokeExact(x, s, i);
+            Object o595 = (Object) INDY_call595 ().invokeExact(x, s, i);
+            Object o596 = (Object) INDY_call596 ().invokeExact(x, s, i);
+            Object o597 = (Object) INDY_call597 ().invokeExact(x, s, i);
+            Object o598 = (Object) INDY_call598 ().invokeExact(x, s, i);
+            Object o599 = (Object) INDY_call599 ().invokeExact(x, s, i);
+            Object o600 = (Object) INDY_call600 ().invokeExact(x, s, i);
+            Object o601 = (Object) INDY_call601 ().invokeExact(x, s, i);
+            Object o602 = (Object) INDY_call602 ().invokeExact(x, s, i);
+            Object o603 = (Object) INDY_call603 ().invokeExact(x, s, i);
+            Object o604 = (Object) INDY_call604 ().invokeExact(x, s, i);
+            Object o605 = (Object) INDY_call605 ().invokeExact(x, s, i);
+            Object o606 = (Object) INDY_call606 ().invokeExact(x, s, i);
+            Object o607 = (Object) INDY_call607 ().invokeExact(x, s, i);
+            Object o608 = (Object) INDY_call608 ().invokeExact(x, s, i);
+            Object o609 = (Object) INDY_call609 ().invokeExact(x, s, i);
+            Object o610 = (Object) INDY_call610 ().invokeExact(x, s, i);
+            Object o611 = (Object) INDY_call611 ().invokeExact(x, s, i);
+            Object o612 = (Object) INDY_call612 ().invokeExact(x, s, i);
+            Object o613 = (Object) INDY_call613 ().invokeExact(x, s, i);
+            Object o614 = (Object) INDY_call614 ().invokeExact(x, s, i);
+            Object o615 = (Object) INDY_call615 ().invokeExact(x, s, i);
+            Object o616 = (Object) INDY_call616 ().invokeExact(x, s, i);
+            Object o617 = (Object) INDY_call617 ().invokeExact(x, s, i);
+            Object o618 = (Object) INDY_call618 ().invokeExact(x, s, i);
+            Object o619 = (Object) INDY_call619 ().invokeExact(x, s, i);
+            Object o620 = (Object) INDY_call620 ().invokeExact(x, s, i);
+            Object o621 = (Object) INDY_call621 ().invokeExact(x, s, i);
+            Object o622 = (Object) INDY_call622 ().invokeExact(x, s, i);
+            Object o623 = (Object) INDY_call623 ().invokeExact(x, s, i);
+            Object o624 = (Object) INDY_call624 ().invokeExact(x, s, i);
+            Object o625 = (Object) INDY_call625 ().invokeExact(x, s, i);
+            Object o626 = (Object) INDY_call626 ().invokeExact(x, s, i);
+            Object o627 = (Object) INDY_call627 ().invokeExact(x, s, i);
+            Object o628 = (Object) INDY_call628 ().invokeExact(x, s, i);
+            Object o629 = (Object) INDY_call629 ().invokeExact(x, s, i);
+            Object o630 = (Object) INDY_call630 ().invokeExact(x, s, i);
+            Object o631 = (Object) INDY_call631 ().invokeExact(x, s, i);
+            Object o632 = (Object) INDY_call632 ().invokeExact(x, s, i);
+            Object o633 = (Object) INDY_call633 ().invokeExact(x, s, i);
+            Object o634 = (Object) INDY_call634 ().invokeExact(x, s, i);
+            Object o635 = (Object) INDY_call635 ().invokeExact(x, s, i);
+            Object o636 = (Object) INDY_call636 ().invokeExact(x, s, i);
+            Object o637 = (Object) INDY_call637 ().invokeExact(x, s, i);
+            Object o638 = (Object) INDY_call638 ().invokeExact(x, s, i);
+            Object o639 = (Object) INDY_call639 ().invokeExact(x, s, i);
+            Object o640 = (Object) INDY_call640 ().invokeExact(x, s, i);
+            Object o641 = (Object) INDY_call641 ().invokeExact(x, s, i);
+            Object o642 = (Object) INDY_call642 ().invokeExact(x, s, i);
+            Object o643 = (Object) INDY_call643 ().invokeExact(x, s, i);
+            Object o644 = (Object) INDY_call644 ().invokeExact(x, s, i);
+            Object o645 = (Object) INDY_call645 ().invokeExact(x, s, i);
+            Object o646 = (Object) INDY_call646 ().invokeExact(x, s, i);
+            Object o647 = (Object) INDY_call647 ().invokeExact(x, s, i);
+            Object o648 = (Object) INDY_call648 ().invokeExact(x, s, i);
+            Object o649 = (Object) INDY_call649 ().invokeExact(x, s, i);
+            Object o650 = (Object) INDY_call650 ().invokeExact(x, s, i);
+            Object o651 = (Object) INDY_call651 ().invokeExact(x, s, i);
+            Object o652 = (Object) INDY_call652 ().invokeExact(x, s, i);
+            Object o653 = (Object) INDY_call653 ().invokeExact(x, s, i);
+            Object o654 = (Object) INDY_call654 ().invokeExact(x, s, i);
+            Object o655 = (Object) INDY_call655 ().invokeExact(x, s, i);
+            Object o656 = (Object) INDY_call656 ().invokeExact(x, s, i);
+            Object o657 = (Object) INDY_call657 ().invokeExact(x, s, i);
+            Object o658 = (Object) INDY_call658 ().invokeExact(x, s, i);
+            Object o659 = (Object) INDY_call659 ().invokeExact(x, s, i);
+            Object o660 = (Object) INDY_call660 ().invokeExact(x, s, i);
+            Object o661 = (Object) INDY_call661 ().invokeExact(x, s, i);
+            Object o662 = (Object) INDY_call662 ().invokeExact(x, s, i);
+            Object o663 = (Object) INDY_call663 ().invokeExact(x, s, i);
+            Object o664 = (Object) INDY_call664 ().invokeExact(x, s, i);
+            Object o665 = (Object) INDY_call665 ().invokeExact(x, s, i);
+            Object o666 = (Object) INDY_call666 ().invokeExact(x, s, i);
+            Object o667 = (Object) INDY_call667 ().invokeExact(x, s, i);
+            Object o668 = (Object) INDY_call668 ().invokeExact(x, s, i);
+            Object o669 = (Object) INDY_call669 ().invokeExact(x, s, i);
+            Object o670 = (Object) INDY_call670 ().invokeExact(x, s, i);
+            Object o671 = (Object) INDY_call671 ().invokeExact(x, s, i);
+            Object o672 = (Object) INDY_call672 ().invokeExact(x, s, i);
+            Object o673 = (Object) INDY_call673 ().invokeExact(x, s, i);
+            Object o674 = (Object) INDY_call674 ().invokeExact(x, s, i);
+            Object o675 = (Object) INDY_call675 ().invokeExact(x, s, i);
+            Object o676 = (Object) INDY_call676 ().invokeExact(x, s, i);
+            Object o677 = (Object) INDY_call677 ().invokeExact(x, s, i);
+            Object o678 = (Object) INDY_call678 ().invokeExact(x, s, i);
+            Object o679 = (Object) INDY_call679 ().invokeExact(x, s, i);
+            Object o680 = (Object) INDY_call680 ().invokeExact(x, s, i);
+            Object o681 = (Object) INDY_call681 ().invokeExact(x, s, i);
+            Object o682 = (Object) INDY_call682 ().invokeExact(x, s, i);
+            Object o683 = (Object) INDY_call683 ().invokeExact(x, s, i);
+            Object o684 = (Object) INDY_call684 ().invokeExact(x, s, i);
+            Object o685 = (Object) INDY_call685 ().invokeExact(x, s, i);
+            Object o686 = (Object) INDY_call686 ().invokeExact(x, s, i);
+            Object o687 = (Object) INDY_call687 ().invokeExact(x, s, i);
+            Object o688 = (Object) INDY_call688 ().invokeExact(x, s, i);
+            Object o689 = (Object) INDY_call689 ().invokeExact(x, s, i);
+            Object o690 = (Object) INDY_call690 ().invokeExact(x, s, i);
+            Object o691 = (Object) INDY_call691 ().invokeExact(x, s, i);
+            Object o692 = (Object) INDY_call692 ().invokeExact(x, s, i);
+            Object o693 = (Object) INDY_call693 ().invokeExact(x, s, i);
+            Object o694 = (Object) INDY_call694 ().invokeExact(x, s, i);
+            Object o695 = (Object) INDY_call695 ().invokeExact(x, s, i);
+            Object o696 = (Object) INDY_call696 ().invokeExact(x, s, i);
+            Object o697 = (Object) INDY_call697 ().invokeExact(x, s, i);
+            Object o698 = (Object) INDY_call698 ().invokeExact(x, s, i);
+            Object o699 = (Object) INDY_call699 ().invokeExact(x, s, i);
+            Object o700 = (Object) INDY_call700 ().invokeExact(x, s, i);
+            Object o701 = (Object) INDY_call701 ().invokeExact(x, s, i);
+            Object o702 = (Object) INDY_call702 ().invokeExact(x, s, i);
+            Object o703 = (Object) INDY_call703 ().invokeExact(x, s, i);
+            Object o704 = (Object) INDY_call704 ().invokeExact(x, s, i);
+            Object o705 = (Object) INDY_call705 ().invokeExact(x, s, i);
+            Object o706 = (Object) INDY_call706 ().invokeExact(x, s, i);
+            Object o707 = (Object) INDY_call707 ().invokeExact(x, s, i);
+            Object o708 = (Object) INDY_call708 ().invokeExact(x, s, i);
+            Object o709 = (Object) INDY_call709 ().invokeExact(x, s, i);
+            Object o710 = (Object) INDY_call710 ().invokeExact(x, s, i);
+            Object o711 = (Object) INDY_call711 ().invokeExact(x, s, i);
+            Object o712 = (Object) INDY_call712 ().invokeExact(x, s, i);
+            Object o713 = (Object) INDY_call713 ().invokeExact(x, s, i);
+            Object o714 = (Object) INDY_call714 ().invokeExact(x, s, i);
+            Object o715 = (Object) INDY_call715 ().invokeExact(x, s, i);
+            Object o716 = (Object) INDY_call716 ().invokeExact(x, s, i);
+            Object o717 = (Object) INDY_call717 ().invokeExact(x, s, i);
+            Object o718 = (Object) INDY_call718 ().invokeExact(x, s, i);
+            Object o719 = (Object) INDY_call719 ().invokeExact(x, s, i);
+            Object o720 = (Object) INDY_call720 ().invokeExact(x, s, i);
+            Object o721 = (Object) INDY_call721 ().invokeExact(x, s, i);
+            Object o722 = (Object) INDY_call722 ().invokeExact(x, s, i);
+            Object o723 = (Object) INDY_call723 ().invokeExact(x, s, i);
+            Object o724 = (Object) INDY_call724 ().invokeExact(x, s, i);
+            Object o725 = (Object) INDY_call725 ().invokeExact(x, s, i);
+            Object o726 = (Object) INDY_call726 ().invokeExact(x, s, i);
+            Object o727 = (Object) INDY_call727 ().invokeExact(x, s, i);
+            Object o728 = (Object) INDY_call728 ().invokeExact(x, s, i);
+            Object o729 = (Object) INDY_call729 ().invokeExact(x, s, i);
+            Object o730 = (Object) INDY_call730 ().invokeExact(x, s, i);
+            Object o731 = (Object) INDY_call731 ().invokeExact(x, s, i);
+            Object o732 = (Object) INDY_call732 ().invokeExact(x, s, i);
+            Object o733 = (Object) INDY_call733 ().invokeExact(x, s, i);
+            Object o734 = (Object) INDY_call734 ().invokeExact(x, s, i);
+            Object o735 = (Object) INDY_call735 ().invokeExact(x, s, i);
+            Object o736 = (Object) INDY_call736 ().invokeExact(x, s, i);
+            Object o737 = (Object) INDY_call737 ().invokeExact(x, s, i);
+            Object o738 = (Object) INDY_call738 ().invokeExact(x, s, i);
+            Object o739 = (Object) INDY_call739 ().invokeExact(x, s, i);
+            Object o740 = (Object) INDY_call740 ().invokeExact(x, s, i);
+            Object o741 = (Object) INDY_call741 ().invokeExact(x, s, i);
+            Object o742 = (Object) INDY_call742 ().invokeExact(x, s, i);
+            Object o743 = (Object) INDY_call743 ().invokeExact(x, s, i);
+            Object o744 = (Object) INDY_call744 ().invokeExact(x, s, i);
+            Object o745 = (Object) INDY_call745 ().invokeExact(x, s, i);
+            Object o746 = (Object) INDY_call746 ().invokeExact(x, s, i);
+            Object o747 = (Object) INDY_call747 ().invokeExact(x, s, i);
+            Object o748 = (Object) INDY_call748 ().invokeExact(x, s, i);
+            Object o749 = (Object) INDY_call749 ().invokeExact(x, s, i);
+            Object o750 = (Object) INDY_call750 ().invokeExact(x, s, i);
+            Object o751 = (Object) INDY_call751 ().invokeExact(x, s, i);
+            Object o752 = (Object) INDY_call752 ().invokeExact(x, s, i);
+            Object o753 = (Object) INDY_call753 ().invokeExact(x, s, i);
+            Object o754 = (Object) INDY_call754 ().invokeExact(x, s, i);
+            Object o755 = (Object) INDY_call755 ().invokeExact(x, s, i);
+            Object o756 = (Object) INDY_call756 ().invokeExact(x, s, i);
+            Object o757 = (Object) INDY_call757 ().invokeExact(x, s, i);
+            Object o758 = (Object) INDY_call758 ().invokeExact(x, s, i);
+            Object o759 = (Object) INDY_call759 ().invokeExact(x, s, i);
+            Object o760 = (Object) INDY_call760 ().invokeExact(x, s, i);
+            Object o761 = (Object) INDY_call761 ().invokeExact(x, s, i);
+            Object o762 = (Object) INDY_call762 ().invokeExact(x, s, i);
+            Object o763 = (Object) INDY_call763 ().invokeExact(x, s, i);
+            Object o764 = (Object) INDY_call764 ().invokeExact(x, s, i);
+            Object o765 = (Object) INDY_call765 ().invokeExact(x, s, i);
+            Object o766 = (Object) INDY_call766 ().invokeExact(x, s, i);
+            Object o767 = (Object) INDY_call767 ().invokeExact(x, s, i);
+            Object o768 = (Object) INDY_call768 ().invokeExact(x, s, i);
+            Object o769 = (Object) INDY_call769 ().invokeExact(x, s, i);
+            Object o770 = (Object) INDY_call770 ().invokeExact(x, s, i);
+            Object o771 = (Object) INDY_call771 ().invokeExact(x, s, i);
+            Object o772 = (Object) INDY_call772 ().invokeExact(x, s, i);
+            Object o773 = (Object) INDY_call773 ().invokeExact(x, s, i);
+            Object o774 = (Object) INDY_call774 ().invokeExact(x, s, i);
+            Object o775 = (Object) INDY_call775 ().invokeExact(x, s, i);
+            Object o776 = (Object) INDY_call776 ().invokeExact(x, s, i);
+            Object o777 = (Object) INDY_call777 ().invokeExact(x, s, i);
+            Object o778 = (Object) INDY_call778 ().invokeExact(x, s, i);
+            Object o779 = (Object) INDY_call779 ().invokeExact(x, s, i);
+            Object o780 = (Object) INDY_call780 ().invokeExact(x, s, i);
+            Object o781 = (Object) INDY_call781 ().invokeExact(x, s, i);
+            Object o782 = (Object) INDY_call782 ().invokeExact(x, s, i);
+            Object o783 = (Object) INDY_call783 ().invokeExact(x, s, i);
+            Object o784 = (Object) INDY_call784 ().invokeExact(x, s, i);
+            Object o785 = (Object) INDY_call785 ().invokeExact(x, s, i);
+            Object o786 = (Object) INDY_call786 ().invokeExact(x, s, i);
+            Object o787 = (Object) INDY_call787 ().invokeExact(x, s, i);
+            Object o788 = (Object) INDY_call788 ().invokeExact(x, s, i);
+            Object o789 = (Object) INDY_call789 ().invokeExact(x, s, i);
+            Object o790 = (Object) INDY_call790 ().invokeExact(x, s, i);
+            Object o791 = (Object) INDY_call791 ().invokeExact(x, s, i);
+            Object o792 = (Object) INDY_call792 ().invokeExact(x, s, i);
+            Object o793 = (Object) INDY_call793 ().invokeExact(x, s, i);
+            Object o794 = (Object) INDY_call794 ().invokeExact(x, s, i);
+            Object o795 = (Object) INDY_call795 ().invokeExact(x, s, i);
+            Object o796 = (Object) INDY_call796 ().invokeExact(x, s, i);
+            Object o797 = (Object) INDY_call797 ().invokeExact(x, s, i);
+            Object o798 = (Object) INDY_call798 ().invokeExact(x, s, i);
+            Object o799 = (Object) INDY_call799 ().invokeExact(x, s, i);
+            Object o800 = (Object) INDY_call800 ().invokeExact(x, s, i);
+            Object o801 = (Object) INDY_call801 ().invokeExact(x, s, i);
+            Object o802 = (Object) INDY_call802 ().invokeExact(x, s, i);
+            Object o803 = (Object) INDY_call803 ().invokeExact(x, s, i);
+            Object o804 = (Object) INDY_call804 ().invokeExact(x, s, i);
+            Object o805 = (Object) INDY_call805 ().invokeExact(x, s, i);
+            Object o806 = (Object) INDY_call806 ().invokeExact(x, s, i);
+            Object o807 = (Object) INDY_call807 ().invokeExact(x, s, i);
+            Object o808 = (Object) INDY_call808 ().invokeExact(x, s, i);
+            Object o809 = (Object) INDY_call809 ().invokeExact(x, s, i);
+            Object o810 = (Object) INDY_call810 ().invokeExact(x, s, i);
+            Object o811 = (Object) INDY_call811 ().invokeExact(x, s, i);
+            Object o812 = (Object) INDY_call812 ().invokeExact(x, s, i);
+            Object o813 = (Object) INDY_call813 ().invokeExact(x, s, i);
+            Object o814 = (Object) INDY_call814 ().invokeExact(x, s, i);
+            Object o815 = (Object) INDY_call815 ().invokeExact(x, s, i);
+            Object o816 = (Object) INDY_call816 ().invokeExact(x, s, i);
+            Object o817 = (Object) INDY_call817 ().invokeExact(x, s, i);
+            Object o818 = (Object) INDY_call818 ().invokeExact(x, s, i);
+            Object o819 = (Object) INDY_call819 ().invokeExact(x, s, i);
+            Object o820 = (Object) INDY_call820 ().invokeExact(x, s, i);
+            Object o821 = (Object) INDY_call821 ().invokeExact(x, s, i);
+            Object o822 = (Object) INDY_call822 ().invokeExact(x, s, i);
+            Object o823 = (Object) INDY_call823 ().invokeExact(x, s, i);
+            Object o824 = (Object) INDY_call824 ().invokeExact(x, s, i);
+            Object o825 = (Object) INDY_call825 ().invokeExact(x, s, i);
+            Object o826 = (Object) INDY_call826 ().invokeExact(x, s, i);
+            Object o827 = (Object) INDY_call827 ().invokeExact(x, s, i);
+            Object o828 = (Object) INDY_call828 ().invokeExact(x, s, i);
+            Object o829 = (Object) INDY_call829 ().invokeExact(x, s, i);
+            Object o830 = (Object) INDY_call830 ().invokeExact(x, s, i);
+            Object o831 = (Object) INDY_call831 ().invokeExact(x, s, i);
+            Object o832 = (Object) INDY_call832 ().invokeExact(x, s, i);
+            Object o833 = (Object) INDY_call833 ().invokeExact(x, s, i);
+            Object o834 = (Object) INDY_call834 ().invokeExact(x, s, i);
+            Object o835 = (Object) INDY_call835 ().invokeExact(x, s, i);
+            Object o836 = (Object) INDY_call836 ().invokeExact(x, s, i);
+            Object o837 = (Object) INDY_call837 ().invokeExact(x, s, i);
+            Object o838 = (Object) INDY_call838 ().invokeExact(x, s, i);
+            Object o839 = (Object) INDY_call839 ().invokeExact(x, s, i);
+            Object o840 = (Object) INDY_call840 ().invokeExact(x, s, i);
+            Object o841 = (Object) INDY_call841 ().invokeExact(x, s, i);
+            Object o842 = (Object) INDY_call842 ().invokeExact(x, s, i);
+            Object o843 = (Object) INDY_call843 ().invokeExact(x, s, i);
+            Object o844 = (Object) INDY_call844 ().invokeExact(x, s, i);
+            Object o845 = (Object) INDY_call845 ().invokeExact(x, s, i);
+            Object o846 = (Object) INDY_call846 ().invokeExact(x, s, i);
+            Object o847 = (Object) INDY_call847 ().invokeExact(x, s, i);
+            Object o848 = (Object) INDY_call848 ().invokeExact(x, s, i);
+            Object o849 = (Object) INDY_call849 ().invokeExact(x, s, i);
+            Object o850 = (Object) INDY_call850 ().invokeExact(x, s, i);
+            Object o851 = (Object) INDY_call851 ().invokeExact(x, s, i);
+            Object o852 = (Object) INDY_call852 ().invokeExact(x, s, i);
+            Object o853 = (Object) INDY_call853 ().invokeExact(x, s, i);
+            Object o854 = (Object) INDY_call854 ().invokeExact(x, s, i);
+            Object o855 = (Object) INDY_call855 ().invokeExact(x, s, i);
+            Object o856 = (Object) INDY_call856 ().invokeExact(x, s, i);
+            Object o857 = (Object) INDY_call857 ().invokeExact(x, s, i);
+            Object o858 = (Object) INDY_call858 ().invokeExact(x, s, i);
+            Object o859 = (Object) INDY_call859 ().invokeExact(x, s, i);
+            Object o860 = (Object) INDY_call860 ().invokeExact(x, s, i);
+            Object o861 = (Object) INDY_call861 ().invokeExact(x, s, i);
+            Object o862 = (Object) INDY_call862 ().invokeExact(x, s, i);
+            Object o863 = (Object) INDY_call863 ().invokeExact(x, s, i);
+            Object o864 = (Object) INDY_call864 ().invokeExact(x, s, i);
+            Object o865 = (Object) INDY_call865 ().invokeExact(x, s, i);
+            Object o866 = (Object) INDY_call866 ().invokeExact(x, s, i);
+            Object o867 = (Object) INDY_call867 ().invokeExact(x, s, i);
+            Object o868 = (Object) INDY_call868 ().invokeExact(x, s, i);
+            Object o869 = (Object) INDY_call869 ().invokeExact(x, s, i);
+            Object o870 = (Object) INDY_call870 ().invokeExact(x, s, i);
+            Object o871 = (Object) INDY_call871 ().invokeExact(x, s, i);
+            Object o872 = (Object) INDY_call872 ().invokeExact(x, s, i);
+            Object o873 = (Object) INDY_call873 ().invokeExact(x, s, i);
+            Object o874 = (Object) INDY_call874 ().invokeExact(x, s, i);
+            Object o875 = (Object) INDY_call875 ().invokeExact(x, s, i);
+            Object o876 = (Object) INDY_call876 ().invokeExact(x, s, i);
+            Object o877 = (Object) INDY_call877 ().invokeExact(x, s, i);
+            Object o878 = (Object) INDY_call878 ().invokeExact(x, s, i);
+            Object o879 = (Object) INDY_call879 ().invokeExact(x, s, i);
+            Object o880 = (Object) INDY_call880 ().invokeExact(x, s, i);
+            Object o881 = (Object) INDY_call881 ().invokeExact(x, s, i);
+            Object o882 = (Object) INDY_call882 ().invokeExact(x, s, i);
+            Object o883 = (Object) INDY_call883 ().invokeExact(x, s, i);
+            Object o884 = (Object) INDY_call884 ().invokeExact(x, s, i);
+            Object o885 = (Object) INDY_call885 ().invokeExact(x, s, i);
+            Object o886 = (Object) INDY_call886 ().invokeExact(x, s, i);
+            Object o887 = (Object) INDY_call887 ().invokeExact(x, s, i);
+            Object o888 = (Object) INDY_call888 ().invokeExact(x, s, i);
+            Object o889 = (Object) INDY_call889 ().invokeExact(x, s, i);
+            Object o890 = (Object) INDY_call890 ().invokeExact(x, s, i);
+            Object o891 = (Object) INDY_call891 ().invokeExact(x, s, i);
+            Object o892 = (Object) INDY_call892 ().invokeExact(x, s, i);
+            Object o893 = (Object) INDY_call893 ().invokeExact(x, s, i);
+            Object o894 = (Object) INDY_call894 ().invokeExact(x, s, i);
+            Object o895 = (Object) INDY_call895 ().invokeExact(x, s, i);
+            Object o896 = (Object) INDY_call896 ().invokeExact(x, s, i);
+            Object o897 = (Object) INDY_call897 ().invokeExact(x, s, i);
+            Object o898 = (Object) INDY_call898 ().invokeExact(x, s, i);
+            Object o899 = (Object) INDY_call899 ().invokeExact(x, s, i);
+            Object o900 = (Object) INDY_call900 ().invokeExact(x, s, i);
+            Object o901 = (Object) INDY_call901 ().invokeExact(x, s, i);
+            Object o902 = (Object) INDY_call902 ().invokeExact(x, s, i);
+            Object o903 = (Object) INDY_call903 ().invokeExact(x, s, i);
+            Object o904 = (Object) INDY_call904 ().invokeExact(x, s, i);
+            Object o905 = (Object) INDY_call905 ().invokeExact(x, s, i);
+            Object o906 = (Object) INDY_call906 ().invokeExact(x, s, i);
+            Object o907 = (Object) INDY_call907 ().invokeExact(x, s, i);
+            Object o908 = (Object) INDY_call908 ().invokeExact(x, s, i);
+            Object o909 = (Object) INDY_call909 ().invokeExact(x, s, i);
+            Object o910 = (Object) INDY_call910 ().invokeExact(x, s, i);
+            Object o911 = (Object) INDY_call911 ().invokeExact(x, s, i);
+            Object o912 = (Object) INDY_call912 ().invokeExact(x, s, i);
+            Object o913 = (Object) INDY_call913 ().invokeExact(x, s, i);
+            Object o914 = (Object) INDY_call914 ().invokeExact(x, s, i);
+            Object o915 = (Object) INDY_call915 ().invokeExact(x, s, i);
+            Object o916 = (Object) INDY_call916 ().invokeExact(x, s, i);
+            Object o917 = (Object) INDY_call917 ().invokeExact(x, s, i);
+            Object o918 = (Object) INDY_call918 ().invokeExact(x, s, i);
+            Object o919 = (Object) INDY_call919 ().invokeExact(x, s, i);
+            Object o920 = (Object) INDY_call920 ().invokeExact(x, s, i);
+            Object o921 = (Object) INDY_call921 ().invokeExact(x, s, i);
+            Object o922 = (Object) INDY_call922 ().invokeExact(x, s, i);
+            Object o923 = (Object) INDY_call923 ().invokeExact(x, s, i);
+            Object o924 = (Object) INDY_call924 ().invokeExact(x, s, i);
+            Object o925 = (Object) INDY_call925 ().invokeExact(x, s, i);
+            Object o926 = (Object) INDY_call926 ().invokeExact(x, s, i);
+            Object o927 = (Object) INDY_call927 ().invokeExact(x, s, i);
+            Object o928 = (Object) INDY_call928 ().invokeExact(x, s, i);
+            Object o929 = (Object) INDY_call929 ().invokeExact(x, s, i);
+            Object o930 = (Object) INDY_call930 ().invokeExact(x, s, i);
+            Object o931 = (Object) INDY_call931 ().invokeExact(x, s, i);
+            Object o932 = (Object) INDY_call932 ().invokeExact(x, s, i);
+            Object o933 = (Object) INDY_call933 ().invokeExact(x, s, i);
+            Object o934 = (Object) INDY_call934 ().invokeExact(x, s, i);
+            Object o935 = (Object) INDY_call935 ().invokeExact(x, s, i);
+            Object o936 = (Object) INDY_call936 ().invokeExact(x, s, i);
+            Object o937 = (Object) INDY_call937 ().invokeExact(x, s, i);
+            Object o938 = (Object) INDY_call938 ().invokeExact(x, s, i);
+            Object o939 = (Object) INDY_call939 ().invokeExact(x, s, i);
+            Object o940 = (Object) INDY_call940 ().invokeExact(x, s, i);
+            Object o941 = (Object) INDY_call941 ().invokeExact(x, s, i);
+            Object o942 = (Object) INDY_call942 ().invokeExact(x, s, i);
+            Object o943 = (Object) INDY_call943 ().invokeExact(x, s, i);
+            Object o944 = (Object) INDY_call944 ().invokeExact(x, s, i);
+            Object o945 = (Object) INDY_call945 ().invokeExact(x, s, i);
+            Object o946 = (Object) INDY_call946 ().invokeExact(x, s, i);
+            Object o947 = (Object) INDY_call947 ().invokeExact(x, s, i);
+            Object o948 = (Object) INDY_call948 ().invokeExact(x, s, i);
+            Object o949 = (Object) INDY_call949 ().invokeExact(x, s, i);
+            Object o950 = (Object) INDY_call950 ().invokeExact(x, s, i);
+            Object o951 = (Object) INDY_call951 ().invokeExact(x, s, i);
+            Object o952 = (Object) INDY_call952 ().invokeExact(x, s, i);
+            Object o953 = (Object) INDY_call953 ().invokeExact(x, s, i);
+            Object o954 = (Object) INDY_call954 ().invokeExact(x, s, i);
+            Object o955 = (Object) INDY_call955 ().invokeExact(x, s, i);
+            Object o956 = (Object) INDY_call956 ().invokeExact(x, s, i);
+            Object o957 = (Object) INDY_call957 ().invokeExact(x, s, i);
+            Object o958 = (Object) INDY_call958 ().invokeExact(x, s, i);
+            Object o959 = (Object) INDY_call959 ().invokeExact(x, s, i);
+            Object o960 = (Object) INDY_call960 ().invokeExact(x, s, i);
+            Object o961 = (Object) INDY_call961 ().invokeExact(x, s, i);
+            Object o962 = (Object) INDY_call962 ().invokeExact(x, s, i);
+            Object o963 = (Object) INDY_call963 ().invokeExact(x, s, i);
+            Object o964 = (Object) INDY_call964 ().invokeExact(x, s, i);
+            Object o965 = (Object) INDY_call965 ().invokeExact(x, s, i);
+            Object o966 = (Object) INDY_call966 ().invokeExact(x, s, i);
+            Object o967 = (Object) INDY_call967 ().invokeExact(x, s, i);
+            Object o968 = (Object) INDY_call968 ().invokeExact(x, s, i);
+            Object o969 = (Object) INDY_call969 ().invokeExact(x, s, i);
+            Object o970 = (Object) INDY_call970 ().invokeExact(x, s, i);
+            Object o971 = (Object) INDY_call971 ().invokeExact(x, s, i);
+            Object o972 = (Object) INDY_call972 ().invokeExact(x, s, i);
+            Object o973 = (Object) INDY_call973 ().invokeExact(x, s, i);
+            Object o974 = (Object) INDY_call974 ().invokeExact(x, s, i);
+            Object o975 = (Object) INDY_call975 ().invokeExact(x, s, i);
+            Object o976 = (Object) INDY_call976 ().invokeExact(x, s, i);
+            Object o977 = (Object) INDY_call977 ().invokeExact(x, s, i);
+            Object o978 = (Object) INDY_call978 ().invokeExact(x, s, i);
+            Object o979 = (Object) INDY_call979 ().invokeExact(x, s, i);
+            Object o980 = (Object) INDY_call980 ().invokeExact(x, s, i);
+            Object o981 = (Object) INDY_call981 ().invokeExact(x, s, i);
+            Object o982 = (Object) INDY_call982 ().invokeExact(x, s, i);
+            Object o983 = (Object) INDY_call983 ().invokeExact(x, s, i);
+            Object o984 = (Object) INDY_call984 ().invokeExact(x, s, i);
+            Object o985 = (Object) INDY_call985 ().invokeExact(x, s, i);
+            Object o986 = (Object) INDY_call986 ().invokeExact(x, s, i);
+            Object o987 = (Object) INDY_call987 ().invokeExact(x, s, i);
+            Object o988 = (Object) INDY_call988 ().invokeExact(x, s, i);
+            Object o989 = (Object) INDY_call989 ().invokeExact(x, s, i);
+            Object o990 = (Object) INDY_call990 ().invokeExact(x, s, i);
+            Object o991 = (Object) INDY_call991 ().invokeExact(x, s, i);
+            Object o992 = (Object) INDY_call992 ().invokeExact(x, s, i);
+            Object o993 = (Object) INDY_call993 ().invokeExact(x, s, i);
+            Object o994 = (Object) INDY_call994 ().invokeExact(x, s, i);
+            Object o995 = (Object) INDY_call995 ().invokeExact(x, s, i);
+            Object o996 = (Object) INDY_call996 ().invokeExact(x, s, i);
+            Object o997 = (Object) INDY_call997 ().invokeExact(x, s, i);
+            Object o998 = (Object) INDY_call998 ().invokeExact(x, s, i);
+            Object o999 = (Object) INDY_call999 ().invokeExact(x, s, i);
+        }
+
+        return true;
+    }
+
+    protected void finalizeTest(boolean ok) throws Throwable {
+        String msg = "Target was called " + _counter.get() + " times of " + _expectedTargetCalls.get();
+        if ( ok && _counter.get() != _expectedTargetCalls.get() )
+            throw new Failure(msg);
+        else
+            Env.display(msg);
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/INDIFY_Test.jmpp	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.stress.java.loopsAndThreads;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.concurrent.atomic.AtomicLong;
+
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MultiThreadedTest;
+import nsk.share.test.Stresser;
+import nsk.share.Failure;
+
+public class INDIFY_Test extends MultiThreadedTest {
+
+#
+# final int INDY_SITES_COUNT = 1000;
+#
+    private AtomicLong _counter = new AtomicLong();
+    private AtomicLong _expectedTargetCalls = new AtomicLong();
+
+    public INDIFY_Test() {
+        super();
+    }
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(Object.class, Object.class, Object.class, Object.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws Exception {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_Test.class,
+                "bootstrap",
+                MT_bootstrap());
+    }
+
+    public static Object bootstrap(Object c, Object name, Object mt) throws Throwable {
+        Env.traceVerbose("bootstrap: Class " + c + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new ConstantCallSite(
+                MethodHandles.lookup().findVirtual(
+                INDIFY_Test.class,
+                "target",
+                MethodType.methodType(Object.class, String.class, int.class)));
+        return cs;
+    }
+
+    public Object target(String s, int i) {
+        Env.traceDebug("target called");
+        _counter.incrementAndGet();
+        return null;
+    }
+
+#
+# for ( int j = 0; j < INDY_SITES_COUNT; j++ ) {
+#
+    private static MethodHandle INDY_call@j;
+    private static MethodHandle INDY_call@j () throws Throwable {
+        if (INDY_call@j != null)
+            return INDY_call@j;
+
+        CallSite cs = (CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(),
+                "greet",
+                MethodType.methodType(Object.class, INDIFY_Test.class, String.class, int.class));
+
+        return cs.dynamicInvoker();
+    }
+#
+# }
+#
+
+    public boolean runThread(int threadNum) throws Throwable {
+        final INDIFY_Test x = this;
+        final String s = "todo el mundo";
+        final int i = 123;
+
+        Stresser stresser = createStresser();
+
+        stresser.start(1);
+        while ( stresser.continueExecution() ) {
+            stresser.iteration();
+
+            long e;
+            do {
+                e = _expectedTargetCalls.get();
+            } while ( ! _expectedTargetCalls.compareAndSet(e, e + @INDY_SITES_COUNT) );
+
+#
+# for ( int j = 0; j < INDY_SITES_COUNT; j++ ) {
+#
+            Object o@j = (Object) INDY_call@j ().invokeExact(x, s, i);
+#
+# }
+#
+        }
+
+        return true;
+    }
+
+    protected void finalizeTest(boolean ok) throws Throwable {
+        String msg = "Target was called " + _counter.get() + " times of " + _expectedTargetCalls.get();
+        if ( ok && _counter.get() != _expectedTargetCalls.get() )
+            throw new Failure(msg);
+        else
+            Env.display(msg);
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/Test.java.jdk8	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.stress.java.loopsAndThreads;
+
+import java.dyn.CallSite;
+import java.dyn.InvokeDynamic;
+import java.dyn.Linkage;
+import java.dyn.MethodHandles;
+import java.dyn.MethodType;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.MultiThreadedTest;
+
+public class Test extends MultiThreadedTest {
+
+    private static final int THREAD_COUNT = 100;
+    private static final int CYCLES_COUNT = 10000; // Provoke compiler
+    private static final long EXPECTED_TARGET_CALLS = 100L * THREAD_COUNT * CYCLES_COUNT;
+
+    private AtomicLong _counter = new AtomicLong();
+
+    static {
+        Linkage.registerBootstrapMethod(Test.class, "bootstrap");
+    }
+
+    public Test() {
+        super(THREAD_COUNT);
+    }
+
+    public static CallSite bootstrap(Class<?> c, String name, MethodType mt) {
+        getLog().trace(0, "Class " + c + "; method name = " + name + "; method type = " + mt);
+        CallSite cs = new CallSite(c, name, mt);
+        cs.setTarget(MethodHandles.publicLookup().findVirtual(
+                Test.class, "target", MethodType.methodType(Object.class, String.class, int.class)));
+        return cs;
+    }
+
+    public Object target(String s, int i) {
+        _counter.incrementAndGet();
+        return null;
+    }
+
+    @Override
+    public boolean runThread() throws Throwable {
+        final Test x = this;
+        for ( int i = 0; i < CYCLES_COUNT; i++ ) {
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "mundus", 123);
+
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "mundus", 123);
+
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "mundus", 123);
+
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "mundus", 123);
+
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "mundus", 123);
+
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "mundus", 123);
+
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "mundus", 123);
+
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "mundus", 123);
+
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "mundus", 123);
+
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "world", 123);
+            InvokeDynamic.greet(x, "mundus", 456);
+            InvokeDynamic.greet(x, "kosmos", 789);
+            InvokeDynamic.greet(x, "mundus", 123);
+        }
+
+        return true;
+    }
+
+    protected boolean tearDown() throws Throwable {
+        getLog().display("Target was called " + _counter + " times of " + EXPECTED_TARGET_CALLS);
+        return _counter.get() == EXPECTED_TARGET_CALLS;
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/loopsAndThreads/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/stress/java/loopsAndThreads.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     A Stress test that starts 100 threads in parallel. Each thread executes 100 InvokeDynamic operation
+ *     in 10,000 cycles (to provoke compiler).
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.stress.java.loopsAndThreads.INDIFY_Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.indy.stress.java.loopsAndThreads.INDIFY_Test
+ *      -stressIterationsFactor 10
+ *      -threadsPerCpu 4
+ *      -threadsExtra 50
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/Actor.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.stress.java.mutableCallSiteDekker;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MutableCallSite;
+import vm.mlvm.share.DekkerTest;
+import vm.mlvm.indy.share.CallSiteDekkerActor;
+
+public class Actor extends CallSiteDekkerActor {
+    public Actor() {
+        super(new MutableCallSite(MH_FALSE), new MutableCallSite(MH_FALSE));
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/mutableCallSiteDekker/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/stress/java/mutableCallSiteDekker.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *    The test tries to detect a stale handle in MutableCallSite due to store-after-load reordering in
+ *    modern CPU.
+ *    Since MutableCallSite does not guarantee that changes by one thread are propagated to others,
+ *    the test may fail. We ignore such failure.
+ *    The current Oracle Hotspot JVM implementation uses an internal mutex when relinking a call site,
+ *    which serves as memory barrier between store and load in this test, so I never saw it failing.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build actor
+ * @build vm.mlvm.indy.stress.java.mutableCallSiteDekker.Actor
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.share.DekkerTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.share.DekkerTest
+ *      -actorClass vm.mlvm.indy.stress.java.mutableCallSiteDekker.Actor
+ *      -iterations 100000
+ *      -runs 30
+ *      -mayFail true
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSite/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/stress/java/relinkMutableCallSite.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine]
+ * VM Testbase comments: 8079664
+ * VM Testbase readme:
+ * DESCRIPTION
+ *    The test creates a mutable call site and relinks it from one thread while calling target from
+ *    the other one.
+ *    The test verifies that target changes in the call site are eventually seen by target calling
+ *    thread by comparing the number of just called target with "golden" one, supplied by target
+ *    relinking thread.
+ *    For internal synchronization between the threads the test uses a non-volatile variable
+ *    without any synchronized() statements or java.util.concurrent classes.
+ *    The test artificially loses synchronization sometimes to verify that test logic is correct.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.stress.java.relinkMutableCallSite.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.indy.stress.java.relinkMutableCallSite.Test
+ *      -stressIterationsFactor 100000
+ */
+
+package vm.mlvm.indy.stress.java.relinkMutableCallSite;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MutableCallSite;
+
+import vm.mlvm.indy.share.INDIFY_RelinkCallSiteTest;
+import vm.mlvm.share.MlvmTest;
+
+public class Test extends INDIFY_RelinkCallSiteTest {
+
+    @Override
+    protected CallSite createCallSite(MethodHandle mh) {
+        return new MutableCallSite(mh);
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/stress/java/relinkMutableCallSiteFreq.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.stress.java.relinkMutableCallSiteFreq.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.indy.stress.java.relinkMutableCallSiteFreq.Test
+ */
+
+package vm.mlvm.indy.stress.java.relinkMutableCallSiteFreq;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MutableCallSite;
+
+import vm.mlvm.indy.share.INDIFY_RelinkCallSiteFreqTest;
+import vm.mlvm.share.MlvmTest;
+
+/**
+ * The test creates a mutable call site and relinks it from one thread while calling the current
+ * target from the other one. Currently there are 6 targets.
+
+ * The test verifies that target changes in the call site are eventually seen by target calling
+ * thread by measuring a frequency of calls for each target and comparing it with theoretical frequency.
+ *
+ */
+public class Test extends INDIFY_RelinkCallSiteFreqTest {
+
+    @Override
+    protected CallSite createCallSite(MethodHandle mh) {
+        return new MutableCallSite(mh);
+    }
+
+    /**
+     * Runs the test.
+     * @param args Arguments to the test.
+     */
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSite/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/stress/java/relinkVolatileCallSite.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine]
+ * VM Testbase comments: 8079664
+ * VM Testbase readme:
+ * DESCRIPTION
+ *    The test creates a volatile call site and relinks it from one thread while calling target from
+ *    the other one.
+ *    The test verifies that target changes in the call site are eventually seen by target calling
+ *    thread by comparing the number of just called target with "golden" one, supplied by target
+ *    relinking thread.
+ *    For internal synchronization between the threads the test uses a non-volatile variable
+ *    without any synchronized() statements or java.util.concurrent classes.
+ *    The test artificially loses synchronization sometimes to verify that test logic is correct.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.stress.java.relinkVolatileCallSite.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.indy.stress.java.relinkVolatileCallSite.Test
+ *      -stressIterationsFactor 100000
+ */
+
+package vm.mlvm.indy.stress.java.relinkVolatileCallSite;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.VolatileCallSite;
+
+import vm.mlvm.indy.share.INDIFY_RelinkCallSiteTest;
+import vm.mlvm.share.MlvmTest;
+
+public class Test extends INDIFY_RelinkCallSiteTest {
+
+    @Override
+    protected CallSite createCallSite(MethodHandle mh) {
+        return new VolatileCallSite(mh);
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/stress/java/relinkVolatileCallSiteFreq.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.stress.java.relinkVolatileCallSiteFreq.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.indy.stress.java.relinkVolatileCallSiteFreq.Test
+ */
+
+package vm.mlvm.indy.stress.java.relinkVolatileCallSiteFreq;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.VolatileCallSite;
+
+import vm.mlvm.indy.share.INDIFY_RelinkCallSiteFreqTest;
+import vm.mlvm.share.MlvmTest;
+
+/**
+ * The test creates a volatile call site and relinks it from one thread while calling the current
+ * target from the other one. Currently there are 6 targets.
+ *
+ * The test verifies that target changes in the call site are eventually seen by target calling
+ * thread by measuring a frequency of calls for each target and comparing it with theoretical frequency.
+ *
+ */
+public class Test extends INDIFY_RelinkCallSiteFreqTest {
+
+    @Override
+    protected CallSite createCallSite(MethodHandle mh) {
+        return new VolatileCallSite(mh);
+    }
+
+    /**
+     * Runs the test.
+     * @param args Test arguments
+     */
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/Actor.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.indy.stress.java.volatileCallSiteDekker;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VolatileCallSite;
+import vm.mlvm.share.DekkerTest;
+import vm.mlvm.indy.share.CallSiteDekkerActor;
+
+public class Actor extends CallSiteDekkerActor {
+    public Actor() {
+        super(new VolatileCallSite(MH_FALSE), new VolatileCallSite(MH_FALSE));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/java/volatileCallSiteDekker/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/stress/java/volatileCallSiteDekker.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *    The test tries to detect a stale handle in VolatileCallSite due to store-after-load reordering in
+ *    modern CPU.
+ *    The current Oracle Hotspot JVM implementation uses an internal mutex when relinking a call site,
+ *    which serves as memory barrier between store and load in this test, so I never saw it failing.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *
+ * @comment build actor
+ * @build vm.mlvm.indy.stress.java.volatileCallSiteDekker.Actor
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.share.DekkerTest
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.share.DekkerTest
+ *      -actorClass vm.mlvm.indy.stress.java.volatileCallSiteDekker.Actor
+ *      -iterations 100000
+ *      -runs 30
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/indy/stress/jdi/breakpointInCompiledCode.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, fds, jdk]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Execute an invokedynamic instruction 10000 times to trigger Hotspot compilation. Set a debugger breakpoint to invokedynamic instruction.
+ *     Make few debugger steps, obtaining various information from JVM
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build debuggee class
+ * @build vm.mlvm.share.jdi.IndyDebuggee
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.indy.stress.jdi.breakpointInCompiledCode.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm PropertyResolvingWrapper
+ *      vm.mlvm.indy.stress.jdi.breakpointInCompiledCode.Test
+ *      -verbose
+ *      -arch=${os.family}-${os.simpleArch}
+ *      -waittime=5
+ *      -debugee.vmkind=java
+ *      -transport.address=dynamic
+ *      -debugger.debuggeeClass vm.mlvm.share.jdi.IndyDebuggee
+ *      -debuggee.iterations 20000
+ *      -debugee.vmkeys="${test.vm.opts} ${test.java.opts}"
+ */
+
+package vm.mlvm.indy.stress.jdi.breakpointInCompiledCode;
+
+import vm.mlvm.share.jdi.ArgumentHandler;
+import vm.mlvm.share.jdi.BreakpointInfo;
+import vm.mlvm.share.jdi.JDIBreakpointTest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Test extends JDIBreakpointTest {
+    //  bootstrap,runDebuggee=>(indyWrapper:S5000,~target,stop)
+    @Override
+    protected List<BreakpointInfo> getBreakpoints(String debuggeeClassName)  {
+        List<BreakpointInfo> result = new ArrayList<>();
+        result.add(new BreakpointInfo("bootstrap"));
+        {
+            BreakpointInfo info = new BreakpointInfo("runDebuggee");
+            // =>(indyWrapper:S5000,~target,stop)
+            List<BreakpointInfo> subBreakpoints = new ArrayList<>();
+            {
+                BreakpointInfo sub = new BreakpointInfo("indyWrapper", true);
+                sub.stepsToTrace = 5000;
+                subBreakpoints.add(sub);
+            }
+            {
+                BreakpointInfo sub = new BreakpointInfo("target", true);
+                sub.type = BreakpointInfo.Type.IMPLICIT;
+                subBreakpoints.add(sub);
+            }
+            subBreakpoints.add(new BreakpointInfo("stop", true));
+
+            info.subBreakpoints = subBreakpoints;
+            result.add(info);
+        }
+        return result;
+    }
+
+    public static void main(String[] args) {
+        launch(new ArgumentHandler(args));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/java/throwException/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/func/java/throwException.
+ * VM Testbase keywords: [feature_mlvm, quarantine]
+ * VM Testbase comments: 8079714
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     The test creates a sequence of MHs (see vm/mlvm/mh/func/sequences test for details)
+ *     and throws an exception from the latest test of this sequence and verifies that
+ *     the exception is passed correctly.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.func.java.throwException.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.meth.func.java.throwException.Test
+ */
+
+package vm.mlvm.meth.func.java.throwException;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHTransformationGen;
+import vm.mlvm.meth.share.RandomArgumentGen;
+import vm.mlvm.meth.share.RandomArgumentsGen;
+import vm.mlvm.meth.share.transform.v2.MHMacroTF;
+import vm.mlvm.share.MlvmTest;
+
+public class Test extends MlvmTest {
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+
+    public static class Example {
+        private Throwable t;
+
+        public Example(Throwable t) {
+            this.t = t;
+        }
+
+        public Object m0(int i, String s, Float f) {
+            RuntimeException re = new RuntimeException("Good luck!");
+            re.initCause(this.t);
+            throw re;
+        }
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+
+        final RuntimeException requiredException = new RuntimeException("test");
+        final Example e = new Example(requiredException);
+
+        final MethodHandle mh = MethodHandles.lookup().findVirtual(
+                Example.class, "m0",
+                MethodType.methodType(Object.class, int.class, String.class, Float.class));
+
+        Argument[] finalArgs = RandomArgumentsGen.createRandomArgs(true, mh.type());
+        Argument retVal = RandomArgumentGen.next(mh.type().returnType());
+        retVal.setPreserved(true);
+
+        MHMacroTF seq = MHTransformationGen.createSequence(retVal, e, mh, finalArgs);
+
+        try {
+            MHTransformationGen.callSequence(seq, false);
+            getLog().complain("Did not catch a required exception!");
+            return false;
+        } catch ( Throwable t ) {
+            while ( t != null && t instanceof Exception ) {
+                t = t.getCause();
+                if ( t.equals(requiredException) ) {
+                    getLog().display("Got a proper exception:");
+                    t.printStackTrace(getLog().getOutStream());
+                    return true;
+                }
+            }
+
+            getLog().complain("Got wrong exception!");
+            t.printStackTrace(getLog().getOutStream());
+            return false;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/func/jdi/breakpoint.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Using JDI set a debugger breakpoint on a method inside a method handle sequence.
+ *     Go few steps, obtaining various information from JVM.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build debuggee class
+ * @build vm.mlvm.share.jdi.MHDebuggee
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.func.jdi.breakpoint.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm PropertyResolvingWrapper
+ *      vm.mlvm.meth.func.jdi.breakpoint.Test
+ *      -verbose
+ *      -arch=${os.family}-${os.simpleArch}
+ *      -waittime=5
+ *      -debugee.vmkind=java
+ *      -transport.address=dynamic
+ *      -debugger.debuggeeClass vm.mlvm.share.jdi.MHDebuggee
+ */
+
+package vm.mlvm.meth.func.jdi.breakpoint;
+
+import vm.mlvm.share.jdi.ArgumentHandler;
+import vm.mlvm.share.jdi.BreakpointInfo;
+import vm.mlvm.share.jdi.JDIBreakpointTest;
+import vm.mlvm.share.jpda.StratumInfo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Test extends JDIBreakpointTest {
+    // invokeMH:S100,invokePlain:S100,mhTarget,plainTarget,stop
+    @Override
+    protected List<BreakpointInfo> getBreakpoints(String debuggeeClassName) {
+        List<BreakpointInfo> result = new ArrayList<>();
+        {
+            BreakpointInfo info = new BreakpointInfo("invokeMH");
+            info.stepsToTrace = 100;
+            result.add(info);
+        }
+        {
+            BreakpointInfo info = new BreakpointInfo("invokePlain");
+            info.stepsToTrace = 100;
+            result.add(info);
+        }
+        result.add(new BreakpointInfo("mhTarget"));
+        result.add(new BreakpointInfo("plainTarget"));
+        result.add(new BreakpointInfo("stop"));
+
+        return result;
+    }
+
+
+    public static void main(String[] args) {
+        launch(new ArgumentHandler(args));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/jdi/breakpointOtherStratum/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/func/jdi/breakpointOtherStratum.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, fds, jdk, quarantine]
+ * VM Testbase comments: 8079713 8079714
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Performs debugging of invokedynamic call in vm.mlvm.share.jdi.INDIFY_Debuggee (with added
+ *     source debug information) and verifies that JDI reports correct SDE locations.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build debuggee class
+ * @build vm.mlvm.share.jdi.MHDebuggee
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.func.jdi.breakpointOtherStratum.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @comment recompile SDE_MHDebuggeeBase with Stratum annotation processor
+ * @clean vm.mlvm.share.jpda.SDE_MHDebuggeeBase
+ * @run driver
+ *      vm.mlvm.share.StratumClassesBuilder
+ *      vmTestbase/vm/mlvm/share/jpda/SDE_MHDebuggeeBase.java
+ *
+ * @run main/othervm PropertyResolvingWrapper
+ *      vm.mlvm.meth.func.jdi.breakpointOtherStratum.Test
+ *      -verbose
+ *      -arch=${os.family}-${os.simpleArch}
+ *      -waittime=5
+ *      -debugee.vmkind=java
+ *      -debugee.vmkeys="-cp ./bin/classes${path.separator}${test.class.path}"
+ *      -transport.address=dynamic
+ *      -debugger.debuggeeClass vm.mlvm.share.jdi.MHDebuggee
+ */
+
+package vm.mlvm.meth.func.jdi.breakpointOtherStratum;
+
+import vm.mlvm.share.jdi.ArgumentHandler;
+import vm.mlvm.share.jdi.BreakpointInfo;
+import vm.mlvm.share.jdi.JDIBreakpointTest;
+import vm.mlvm.share.jpda.StratumInfo;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Test  extends JDIBreakpointTest {
+    @Override
+    protected List<BreakpointInfo> getBreakpoints(String debuggeeClassName) {
+        List<BreakpointInfo> result = new ArrayList<>();
+        // invokeMH:S100/Logo=SDE_MHDebuggeeBase.logo:2
+        {
+            BreakpointInfo info = new BreakpointInfo("invokeMH");
+            info.stepsToTrace = 100;
+            info.stratumInfo = new StratumInfo("Logo", "SDE_MHDebuggeeBase.logo", 2);
+            result.add(info);
+        }
+        // invokePlain:S100/Logo=SDE_MHDebuggeeBase.logo:4
+        {
+            BreakpointInfo info = new BreakpointInfo("invokePlain");
+            info.stepsToTrace = 100;
+            info.stratumInfo = new StratumInfo("Logo", "SDE_MHDebuggeeBase.logo", 4);
+            result.add(info);
+        }
+        // mhTarget/Logo=SDE_MHDebuggeeBase.logo:3
+        {
+            BreakpointInfo info = new BreakpointInfo("mhTarget");
+            info.stratumInfo = new StratumInfo("Logo", "SDE_MHDebuggeeBase.logo", 3);
+            result.add(info);
+        }
+        // plainTarget/Logo=SDE_MHDebuggeeBase.logo:5
+        {
+            BreakpointInfo info = new BreakpointInfo("plainTarget");
+            info.stratumInfo = new StratumInfo("Logo", "SDE_MHDebuggeeBase.logo", 5);
+            result.add(info);
+        }
+        // stop/Logo=SDE_MHDebuggeeBase.logo:6
+        {
+            BreakpointInfo info = new BreakpointInfo("stop");
+            info.stratumInfo = new StratumInfo("Logo", "SDE_MHDebuggeeBase.logo", 6);
+            result.add(info);
+        }
+        return result;
+    }
+
+
+    public static void main(String[] args) {
+        launch(new ArgumentHandler(args));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.mixed.func.regression.b7087658;
+
+import java.util.List;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.MlvmTest;
+
+interface A {
+   Iterable m(List<String> ls);
+}
+
+interface B {
+   Iterable<String> m(List l);
+}
+
+interface AB extends A, B { }
+
+interface AA extends A { }
+
+public class Test extends MlvmTest {
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+
+    @Override
+    public boolean run() throws Throwable {
+        MethodHandle mh1 = MethodHandles.lookup().findVirtual(A.class, "m", MethodType.methodType(Iterable.class, List.class));
+        MethodHandle mh2 = MethodHandles.lookup().findVirtual(B.class, "m", MethodType.methodType(Iterable.class, List.class));
+        MethodHandle mh3 = MethodHandles.lookup().findVirtual(AB.class, "m", MethodType.methodType(Iterable.class, List.class));
+        MethodHandle mh4 = MethodHandles.lookup().findVirtual(AA.class, "m", MethodType.methodType(Iterable.class, List.class));
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7087658/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @bug 7087658
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/func/regression/b7087658.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test for CR 7087658 "MethodHandles.Lookup.findVirtual is confused by
+ *     interface methods that are multiply inherited".
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.mixed.func.regression.b7087658.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.mixed.func.regression.b7087658.Test
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.mixed.func.regression.b7127687;
+
+import nsk.share.Consts;
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.CustomClassLoaders;
+
+import java.lang.invoke.MethodType;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import jdk.internal.org.objectweb.asm.ClassWriter;
+import static jdk.internal.org.objectweb.asm.Opcodes.*;
+
+public class Test extends MlvmTest {
+
+    final static int CLASSES_COUNT = 1000;
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+
+    @Override
+    public boolean run() throws Throwable {
+        List<Class> classes = new ArrayList<Class>();
+
+        //generating list of unique classes
+        for (int i = 0; i < CLASSES_COUNT; i++) {
+            classes.add(generateClass("Class" + i));
+        }
+
+        for (Class a : classes) {
+            for (Class b : classes) {
+                Env.traceNormal("Perform call MethodType.methodType(" + a + ", " + b + ")");
+                MethodType.methodType(a, b);
+            }
+        }
+
+        return true;
+    }
+
+
+    private static Class generateClass(String name) throws ClassNotFoundException{
+        ClassWriter cw = new ClassWriter(0);
+        cw.visit(V1_1, ACC_PUBLIC, name, null, "java/lang/Object", null);
+        return CustomClassLoaders.makeClassBytesLoader(cw.toByteArray(), name).loadClass(name);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7127687/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @bug 7127687
+ * @modules java.base/jdk.internal.org.objectweb.asm
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/func/regression/b7127687.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test for CR 7127687 "MethodType leaks memory due to interning".
+ *     This test generates a lot (N) unique classes and then creates N^2
+ *     instances of MethodType using MethodType.methodType() and generated classes.
+ *     So previous implementation of MethodType.methodType() throws OOM exception
+ *     in this test case.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.mixed.func.regression.b7127687.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm -Xmx64m vm.mlvm.mixed.func.regression.b7127687.Test
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.mixed.func.regression.b7129034;
+
+import java.util.List;
+
+import java.lang.invoke.*;
+import java.lang.reflect.*;
+
+import vm.mlvm.share.MlvmTest;
+
+public class Test extends MlvmTest {
+
+    public Test obj;
+    public String str;
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+
+    @Override
+    public boolean run() throws Throwable {
+        MethodHandles.Lookup l = MethodHandles.publicLookup();
+        Field field = Test.class.getField("str");
+        MethodHandle mh = l.unreflectSetter(field);
+        MethodHandle filter = l.unreflectGetter(Test.class.getField("obj"));
+        mh = MethodHandles.filterArguments(mh, 0, filter);
+        try {
+            mh.invokeExact(new Test(), "hello");
+        } catch (NullPointerException ignore) {
+            System.out.println("PASSED: Expected NPE thrown, no crash");
+        }
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/func/regression/b7129034/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @bug 7129034
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/func/regression/b7129034.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Test for CR 7129034 "VM crash with a field setter method with a filterArguments".
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.mixed.func.regression.b7129034.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.mixed.func.regression.b7129034.Test
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/Argument.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+import nsk.share.test.TestUtils;
+
+public class Argument {
+
+    private final Class<?> type;
+    private final Object value;
+    private boolean isPreserved;
+    private String tag;
+
+    public Argument(Class<?> type, Object value) {
+        this(type, value, false, "");
+    }
+
+    public Argument(Class<?> type, Object value, boolean isPreserved, String tag) {
+        this.type = type;
+        this.value = value;
+        this.isPreserved = isPreserved;
+        this.tag = tag;
+    }
+
+    public Class<?> getType() {
+        return this.type;
+    }
+
+    public Object getValue() {
+        return this.value;
+    }
+
+    public void setPreserved(boolean newValue) {
+        this.isPreserved = newValue;
+    }
+
+    public boolean isPreserved() {
+        return this.isPreserved;
+    }
+
+    public String getTag() {
+        return this.tag;
+    }
+
+    public void setTag(String newTag) {
+        this.tag = newTag;
+    }
+
+    public static Argument fromValue(Object value) {
+        return new Argument(value.getClass(), value);
+    }
+
+    public static Argument fromPrimitiveValue(Object boxedValue) {
+        TestUtils.assertInCollection(TestTypes.UNBOX_MAP.keySet(), boxedValue.getClass());
+        return new Argument(TestTypes.UNBOX_MAP.get(boxedValue.getClass()), boxedValue);
+    }
+
+    public static Argument fromArray(Object[] a) {
+        boolean isProtected = false;
+        if ( a.length > 2 && a[2].getClass().equals(Boolean.class) )
+            isProtected = (Boolean) a[2];
+
+        return new Argument((Class<?>) a[0], a[1], isProtected, "");
+    }
+
+    @Override
+    public String toString() {
+        return getType().getName().replaceFirst("^java.lang.", "") + "="
+             + (getType().equals(String.class) ? "{" + getValue() + "}" : getValue() == null ? "null" : getValue() )
+             + ((! getTag().isEmpty() || isPreserved()) ? ("[" + (isPreserved() ? "!" : "") + getTag() + "]") : "");
+    }
+
+    @Override
+    public Argument clone() {
+        return new Argument(getType(), getValue(), isPreserved(), getTag());
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/Arguments.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+import java.lang.invoke.MethodType;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public final class Arguments {
+
+    public static List<Argument> listFromArray(Object[][] a) {
+        ArrayList<Argument> result = new ArrayList<Argument>(a.length);
+
+        for (Object[] elem : a) {
+            result.add(Argument.fromArray(elem));
+        }
+
+        return result;
+    }
+
+    public static Argument[] fromArray(Object[][] a) {
+        return listFromArray(a).toArray(new Argument[a.length]);
+    }
+
+    public static Class<?>[] typesArray(List<Argument> vts) {
+        return typesArray(vts.toArray(new Argument[vts.size()]));
+    }
+
+    public static Class<?>[] typesArray(Argument[] vts) {
+        Class<?>[] result = new Class<?>[vts.length];
+        for (int i = 0; i < vts.length; i++)
+            result[i] = vts[i].getType();
+        return result;
+    }
+
+    public static Object[] valuesArray(List<Argument> vts) {
+        return valuesArray(vts.toArray(new Argument[vts.size()]));
+    }
+
+    public static Object[] valuesArray(Argument[] vts) {
+        Object[] result = new Object[vts.length];
+        for (int i = 0; i < vts.length; i++)
+            result[i] = vts[i].getValue();
+        return result;
+    }
+
+    public static Argument[] fromMethodType(boolean isVirtual, MethodType t, MethodParameterValueProvider vp) {
+        int virtualOffset = isVirtual ? 1 : 0;
+        Class<?>[] paramTypes = t.parameterArray();
+        Argument[] result = new Argument[paramTypes.length - virtualOffset];
+        for (int i = virtualOffset; i < paramTypes.length; i++) {
+            result[i - virtualOffset] = new Argument(paramTypes[i], vp.getValue(t, i));
+        }
+        return result;
+    }
+
+    public static int[] findTag(List<Argument> args, String tag) {
+        return findTag(args.toArray(new Argument[args.size()]), tag);
+    }
+
+    public static int[] findTag(Argument[] args, String tag) {
+        int[] result = new int[args.length];
+        int resCount = 0;
+        for ( int i = 0; i < args.length; i++ ) {
+            if ( args[i].getTag().equals(tag) )
+                result[resCount++] = i;
+        }
+
+        return Arrays.copyOf(result, resCount);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MHTransformationGen.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,491 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodType;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import nsk.share.test.LazyIntArrayToString;
+import nsk.share.test.TestUtils;
+import vm.mlvm.meth.share.transform.v2.MHArrayEnvelopeTFPair;
+import vm.mlvm.meth.share.transform.v2.MHCall;
+import vm.mlvm.meth.share.transform.v2.MHCollectSpreadTF;
+import vm.mlvm.meth.share.transform.v2.MHConstantTF;
+import vm.mlvm.meth.share.transform.v2.MHDropTF;
+import vm.mlvm.meth.share.transform.v2.MHDropTF2;
+import vm.mlvm.meth.share.transform.v2.MHFilterRetValTF;
+import vm.mlvm.meth.share.transform.v2.MHFilterTF;
+import vm.mlvm.meth.share.transform.v2.MHFoldTF;
+import vm.mlvm.meth.share.transform.v2.MHIdentityTF;
+import vm.mlvm.meth.share.transform.v2.MHInsertTF;
+import vm.mlvm.meth.share.transform.v2.MHMacroTF;
+import vm.mlvm.meth.share.transform.v2.MHOutboundCallTF;
+import vm.mlvm.meth.share.transform.v2.MHOutboundVirtualCallTF;
+import vm.mlvm.meth.share.transform.v2.MHPermuteTF;
+import vm.mlvm.meth.share.transform.v2.MHSamTF;
+import vm.mlvm.meth.share.transform.v2.MHTF;
+import vm.mlvm.meth.share.transform.v2.MHTFPair;
+import vm.mlvm.meth.share.transform.v2.MHThrowCatchTFPair;
+import vm.mlvm.meth.share.transform.v2.MHVarargsCollectSpreadTF;
+import vm.mlvm.share.Env;
+
+public class MHTransformationGen {
+
+    public static final int MAX_CYCLES = 1000;
+
+    private static final int MAX_ARGUMENTS = 10;
+
+    private static final boolean FILTER_OUT_KNOWN_BUGS = false;
+
+    private static final boolean USE_SAM = false; // Disabled in JDK7
+    private static final boolean USE_THROW_CATCH = false; // Test bugs
+
+    public static class ThrowCatchTestException extends Throwable {
+        private static final long serialVersionUID = -6749961303738648241L;
+    }
+
+    @SuppressWarnings("unused")
+    public static MHMacroTF createSequence(Argument finalRetVal, Object boundObj, MethodHandle finalMH, Argument[] finalArgs) throws Throwable {
+        Env.traceDebug("Generating sequence.");
+
+        MHMacroTF graph = new MHMacroTF("sequence");
+
+        MHTF outTF;
+        if ( boundObj != null )
+            outTF = new MHOutboundVirtualCallTF(finalRetVal, boundObj, finalMH, finalArgs);
+        else
+            outTF = new MHOutboundCallTF(finalRetVal, finalMH, finalArgs);
+
+        Env.traceDebug("Outbound call=%s", outTF);
+        graph.addTransformation(outTF);
+
+        if ( MAX_CYCLES == 0 )
+            return graph;
+
+        List<MHTFPair> pendingPWTFs = new LinkedList<MHTFPair>();
+
+        for ( int i = nextInt(MAX_CYCLES); i > 0; i-- ) {
+            MHCall lastCall = graph.computeInboundCall();
+            Argument[] lastArgs = lastCall.getArgs();
+            MethodType type = lastCall.getTargetMH().type();
+            Argument lastRetVal = lastCall.getRetVal();
+
+            int lastArgsSlots = computeVmSlotCount(lastArgs);
+            if ( boundObj != null )
+                lastArgsSlots += TestTypes.getSlotsCount(boundObj.getClass());
+
+            Env.traceDebug("Current last call: %s", lastCall);
+
+            MHTF tf = null;
+            MHTFPair tfPair = null;
+
+            int nextCase = nextInt(12);
+
+            Env.traceDebug("Adding case #" + nextCase);
+            try {
+                switch ( nextCase ) {
+                    case 0: { // add next pending TF
+                        if ( pendingPWTFs.size() > 0 ) {
+                            MHTFPair pwtf = pendingPWTFs.remove(0);
+                            tf = pwtf.getInboundTF(lastCall);
+                            Env.traceDebug("(adding pending inbound transformation)");
+                        }
+                    }
+                    break;
+
+                    case 1: { // Drop arguments
+                        int pos = nextInt(lastArgs.length);
+                        int nArgs = nextInt(MAX_ARGUMENTS);
+                        if ( nArgs == 0 )
+                            break;
+
+                        Argument[] values = new Argument[nArgs];
+                        for ( int j = 0; j < nArgs; j++ )
+                            values[j] = RandomArgumentGen.next();
+
+                        int valuesSlots = computeVmSlotCount(values);
+
+                        int newValuesCount = nArgs;
+                        while ( valuesSlots + lastArgsSlots > MAX_ARGUMENTS ) {
+                            valuesSlots -= TestTypes.getSlotsCount(values[newValuesCount - 1].getType());
+                            --newValuesCount;
+                        }
+
+                        if ( newValuesCount != nArgs )
+                            values = Arrays.copyOf(values, newValuesCount);
+
+                        if ( Env.getRNG().nextBoolean() )
+                            tf = new MHDropTF(lastCall, pos, values);
+                        else
+                            tf = new MHDropTF2(lastCall, pos, values);
+                    }
+                    break;
+
+                    case 2: { // Insert arguments
+                        if ( lastArgs.length == 0 )
+                            break;
+
+                        int pos = nextInt(lastArgs.length);
+
+                        int p;
+                        for ( p = pos; p < pos + lastArgs.length; p++ ) {
+                            if ( ! lastArgs[p % lastArgs.length].isPreserved() )
+                                break;
+                        }
+
+                        pos = p % lastArgs.length;
+                        if ( lastArgs[pos].isPreserved() )
+                            break;
+
+                        int nArgs = 1 + nextInt(lastArgs.length - pos - 1);
+
+                        for ( p = pos + 1; p < pos + nArgs; p++ ) {
+                            if ( lastArgs[p].isPreserved() )
+                                break;
+                        }
+
+                        nArgs = p - pos;
+
+                        Argument[] values = Arrays.copyOfRange(lastArgs, pos, pos + nArgs);
+
+                        tf = new MHInsertTF(lastCall, pos, values, false);
+                    }
+                    break;
+
+                    case 3: { // Throw + catch
+                        if ( ! USE_THROW_CATCH )
+                            break;
+
+                        if ( lastArgsSlots + 1 >= MAX_ARGUMENTS )
+                            break;
+
+                        Argument testArg = RandomArgumentGen.next();
+                        Env.traceDebug("testArgument=%s", testArg);
+
+                        Object testValue2;
+                        boolean eqTest = (Boolean) RandomValueGen.next(Boolean.class);
+                        if ( eqTest ) {
+                            testValue2 = testArg.getValue();
+                        } else {
+                            testValue2 = RandomValueGen.nextDistinct(testArg.getType(), testArg.getValue());
+                        }
+
+                        tfPair = new MHThrowCatchTFPair(lastCall, testArg, testValue2, eqTest, new ThrowCatchTestException());
+                    }
+                    break;
+
+                    case 4: { // Permute arguments
+
+                        List<Integer> targetArgNumbers = new LinkedList<Integer>();
+                        for ( int n = 0;  n < lastArgs.length; n++ )
+                            targetArgNumbers.add(n);
+                        Collections.shuffle(targetArgNumbers, Env.getRNG());
+
+                        Argument[] sourceArgs = new Argument[lastArgs.length];
+                        for ( int n = 0; n < lastArgs.length; n++ ) {
+                            sourceArgs[targetArgNumbers.get(n)] = lastArgs[n];
+                        }
+
+                        MethodType newMT = MethodType.methodType(type.returnType(), Arguments.typesArray(sourceArgs));
+
+                        // Java has no other means for converting Integer[] to int[]
+                        int[] permuteArray = new int[targetArgNumbers.size()];
+                        for ( int n = 0; n < permuteArray.length; n++ )
+                            permuteArray[n] = targetArgNumbers.get(n);
+
+                        Env.traceDebug("Permute: permuteArray=%s; newMT=%s; oldMT=%s", new LazyIntArrayToString(permuteArray), newMT, lastCall.getTargetMH());
+
+                        tf = new MHPermuteTF(lastCall, newMT, permuteArray);
+                    }
+                    break;
+
+                    case 5: { // Fold arguments
+                        if ( lastArgs.length == 0 )
+                            break;
+
+                        Argument arg = lastArgs[0];
+                        if ( arg.isPreserved() )
+                            break;
+
+                        Argument[] restOfArgs = TestUtils.cdr(lastArgs);
+
+                        MHMacroTF mTF = new MHMacroTF("fold arguments");
+                        mTF.addOutboundCall(lastCall);
+
+                        MHCall combinerCall = mTF.addTransformation(new MHDropTF(
+                                mTF.addTransformation(new MHConstantTF(arg)),
+                                0, restOfArgs
+                        ));
+
+                        Env.traceDebug("combinerCall=%s", combinerCall);
+                        Env.traceDebug("targetCall=%s", lastCall);
+
+                        mTF.addTransformation(new MHFoldTF(
+                                lastCall,
+                                combinerCall
+                        ));
+
+                        tf = mTF;
+                    }
+                    break;
+
+                    case 6: { // Filter arguments
+                        if ( lastArgs.length == 0 )
+                            break;
+
+                        int pos = nextInt(lastArgs.length);
+                        int nArgs = 1 + nextInt(lastArgs.length - pos - 1);
+
+                        MHMacroTF mTF = new MHMacroTF("identity filter arguments");
+                        mTF.addOutboundCall(lastCall);
+
+                        MHCall[] filters = new MHCall[nArgs];
+                        for ( int n = 0; n < filters.length; n++ ) {
+                            if ( nextInt(5) != 0 ) {
+                                filters[n] = mTF.addTransformation(new MHIdentityTF(lastArgs[n + pos]));
+                            }
+                        }
+
+                        mTF.addTransformation(new MHFilterTF(lastCall, pos, filters));
+
+                        tf = mTF;
+                    }
+                    break;
+
+                    case 7: { // filter
+                        if ( lastArgs.length <= 1 )
+                            break;
+
+                        int pos = nextInt(lastArgs.length);
+                        int nArgs;
+                        if ( pos == lastArgs.length - 1 )
+                            nArgs = 1;
+                        else
+                            nArgs = 1 + nextInt(lastArgs.length - pos - 1);
+
+                        MHMacroTF mTF = new MHMacroTF("replace filter arguments");
+                        mTF.addOutboundCall(lastCall);
+
+                        MHCall[] filters = new MHCall[nArgs];
+
+                        loop:
+                        for ( int n = 0; n < nArgs; n++ ) {
+                            Argument arg = lastArgs[pos + n];
+                            if ( nextInt(5) == 0 || arg.isPreserved() )
+                                continue;
+
+                            Class<?> argType = arg.getType();
+                            Object value = RandomValueGen.next(argType);
+                            Argument newArg = new Argument(argType, value);
+
+                            filters[n] = mTF.addTransformation(new MHDropTF(
+                                             mTF.addTransformation(new MHConstantTF(arg)),
+                                             0, new Argument[] { newArg }
+                                         ));
+                        }
+
+                        mTF.addTransformation(new MHFilterTF(lastCall, pos, filters));
+
+                        tf = mTF;
+                    }
+                    break;
+
+                    case 8: { // Filter return value
+                        if ( lastRetVal.isPreserved() )
+                            break;
+
+                        Class<?> lastRetType = lastRetVal.getType();
+                        if ( lastRetType.equals(void.class) )
+                            break;
+
+                        Argument newRetVal = new Argument(lastRetType, RandomValueGen.next(lastRetType));
+
+                        MHMacroTF mTF = new MHMacroTF("filter retval");
+                        mTF.addOutboundCall(lastCall);
+                        mTF.addTransformation(new MHFilterRetValTF(lastCall,
+                                mTF.addTransformation(new MHDropTF(
+                                            mTF.addTransformation(new MHConstantTF(newRetVal)),
+                                            0,
+                                            new Argument[] { lastRetVal }
+                                ))
+                        ));
+
+                        tf = mTF;
+                    }
+                    break;
+
+                    case 9: { // SAM
+                        if ( ! USE_SAM )
+                            break;
+
+                        tf = new MHSamTF(lastCall);
+                    }
+                    break;
+
+                    case 10: { // Envelope argument into array
+                        if ( lastArgs.length >= 0 )
+                            break;
+
+                        int arraySize = 1 + nextInt(0xffff);
+                        int arrayIdx = nextInt(arraySize);
+                        int argNum = nextInt(lastArgs.length);
+                        tfPair = new MHArrayEnvelopeTFPair(lastCall, argNum, arrayIdx, arraySize);
+                    }
+                    break;
+
+                    case 11: { // Collect + spread
+                        if ( nextInt(1) == 0 )
+                            tf = new MHCollectSpreadTF(lastCall);
+                        else
+                            tf = new MHVarargsCollectSpreadTF(lastCall);
+                    }
+                    break;
+                }
+
+                if ( FILTER_OUT_KNOWN_BUGS ) {
+                    if ( tfPair != null ) {
+                        Env.traceDebug("Checking transformation pair %s", tfPair);
+
+                        tfPair.getInboundTF(tfPair.getOutboundTF().computeInboundCall()).computeInboundCall();
+                    } else if ( tf != null ) {
+                        Env.traceDebug("Checking transformation %s", tf);
+                        tf.computeInboundCall();
+                    }
+                }
+
+            } catch ( Throwable e ) {
+                if ( ! FILTER_OUT_KNOWN_BUGS )
+                    throw e;
+
+                String msg = e.getMessage();
+                for ( Throwable t = e.getCause(); t != null; t = t.getCause() ) {
+                    msg += " ";
+                    msg += t.getMessage();
+                }
+
+                if ( msg != null
+                  && ! msg.contains("NONE SO FAR 2011-07-10")
+                   ) {
+                    throw e;
+                }
+
+                Env.traceDebug("Failed to add transformation %s; Error: %s", tf, msg);
+                tfPair = null;
+                tf = null;
+            }
+
+            if ( tfPair != null ) {
+                MHTF oTF = tfPair.getOutboundTF();
+                Env.traceDebug("Adding outbound transformation %s", oTF);
+                graph.addTransformation(oTF);
+                pendingPWTFs.add(tfPair);
+            } else if ( tf != null ) {
+                Env.traceDebug("Adding transformation %s", tf);
+                graph.addTransformation(tf);
+            } else {
+                Env.traceDebug("Skipping transformation");
+            }
+        }
+
+        while ( pendingPWTFs.size() > 0 ) {
+            MHTFPair pwtf = pendingPWTFs.remove(0);
+            MHTF tf = pwtf.getInboundTF(graph.computeInboundCall());
+
+            Env.traceDebug("Adding pending inbound transformation: %s", tf);
+            graph.addTransformation(tf);
+        }
+
+        Env.traceVerbose("MHTransformationGen produced graph: %s", graph);
+
+        return graph;
+    }
+
+    private static int computeVmSlotCount(Argument[] values) {
+        int count = 0;
+        for ( Argument v : values )
+            count += TestTypes.getSlotsCount(v.getType());
+        return count;
+    }
+
+    public static Object callSequence(MHMacroTF seq, boolean checkRetVal) throws Throwable {
+        Env.traceVerbose("Calling sequence...");
+        MHCall call = seq.computeInboundCall();
+        Object result;
+        try {
+            if ( checkRetVal ) {
+                result = call.callAndCheckRetVal();
+            } else {
+                result = call.call();
+            }
+        } catch ( Throwable t ) {
+            Env.traceNormal(t, "Exception during calling a sequence");
+            throw (Exception) (new Exception("Exception in sequence " + seq.toString()).initCause(t));
+        }
+        Env.traceVerbose("Sequence result = %s", result);
+        return result;
+    }
+
+    public static Object createAndCallSequence(Argument finalRetVal, Object boundObj, MethodHandle finalMH, Argument[] finalArgs, boolean checkRetVal) throws Throwable {
+        return callSequence(createSequence(finalRetVal, boundObj, finalMH, finalArgs), checkRetVal);
+    }
+
+    public static void transformToMatchArgsNum(MHMacroTF graph, int argNumMin, int argNumMax) throws Throwable {
+        MHCall lastCall = graph.computeInboundCall();
+        Argument[] lastArgs = lastCall.getArgs();
+
+        if ( lastArgs.length > argNumMax ) {
+
+            // TODO: preserved args
+            MHTF tf = new MHInsertTF(lastCall, argNumMax, Arrays.copyOfRange(lastArgs, argNumMax, lastArgs.length), false);
+            Env.traceVerbose("Adding transformation to match %d limit: %s", argNumMax, tf);
+            graph.addTransformation(tf);
+
+        } else if ( lastArgs.length < argNumMin ) {
+
+            int argsToInsert = argNumMin - lastArgs.length;
+
+            Argument[] values = new Argument[argsToInsert];
+            for ( int j = 0; j < argsToInsert; j++ )
+                values[j] = RandomArgumentGen.next();
+
+            int pos = 0;
+
+            MHTF tf = new MHDropTF(lastCall, pos, values);
+            Env.traceVerbose("Adding transformation to match %d arguments: %s", argNumMin, tf);
+            graph.addTransformation(tf);
+
+        }
+    }
+
+    private static int nextInt(int i) {
+        if ( i == 0 )
+            return 0;
+        else
+            return Env.getRNG().nextInt(i);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MHUtils.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+public final class MHUtils {
+
+    public static void assertAssignableType(Object info, Class<?> requiredType, Class<?> actualType) throws IllegalArgumentException {
+        if ( ! requiredType.isAssignableFrom(actualType) ) {
+            throw new IllegalArgumentException("Illegal argument type for " + info
+                                             + ": required=" + requiredType
+                                             + "; actual=" + actualType);
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/MethodParameterValueProvider.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+import java.lang.invoke.MethodType;
+
+public interface MethodParameterValueProvider {
+
+    Object getValue(MethodType t, int paramNum);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/PrimitiveTypeConverter.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// generated from vm/mlvm/meth/share/PrimitiveTypeConverter.jmpp
+
+package vm.mlvm.meth.share;
+
+public class PrimitiveTypeConverter {
+
+    /** Unbox, cast and box */
+    public static Object cast(Object fromValue, Class<?> toType) {
+
+        Class<?> fromType = fromValue.getClass();
+
+        if ( Byte.class.equals(fromType) && toType.equals(byte.class) )
+            return fromValue;
+
+        if ( Byte.class.equals(fromType) && toType.equals(short.class) )
+            return Short.valueOf((short) ((Byte) fromValue).byteValue());
+
+        if ( Byte.class.equals(fromType) && toType.equals(char.class) )
+            return Character.valueOf((char) ((Byte) fromValue).byteValue());
+
+        if ( Byte.class.equals(fromType) && toType.equals(int.class) )
+            return Integer.valueOf((int) ((Byte) fromValue).byteValue());
+
+        if ( Byte.class.equals(fromType) && toType.equals(long.class) )
+            return Long.valueOf((long) ((Byte) fromValue).byteValue());
+
+        if ( Byte.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Byte) fromValue).byteValue());
+
+        if ( Byte.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Byte) fromValue).byteValue());
+
+        if ( Short.class.equals(fromType) && toType.equals(byte.class) )
+            return Byte.valueOf((byte) ((Short) fromValue).shortValue());
+
+        if ( Short.class.equals(fromType) && toType.equals(short.class) )
+            return fromValue;
+
+        if ( Short.class.equals(fromType) && toType.equals(char.class) )
+            return Character.valueOf((char) ((Short) fromValue).shortValue());
+
+        if ( Short.class.equals(fromType) && toType.equals(int.class) )
+            return Integer.valueOf((int) ((Short) fromValue).shortValue());
+
+        if ( Short.class.equals(fromType) && toType.equals(long.class) )
+            return Long.valueOf((long) ((Short) fromValue).shortValue());
+
+        if ( Short.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Short) fromValue).shortValue());
+
+        if ( Short.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Short) fromValue).shortValue());
+
+        if ( Character.class.equals(fromType) && toType.equals(byte.class) )
+            return Byte.valueOf((byte) ((Character) fromValue).charValue());
+
+        if ( Character.class.equals(fromType) && toType.equals(short.class) )
+            return Short.valueOf((short) ((Character) fromValue).charValue());
+
+        if ( Character.class.equals(fromType) && toType.equals(char.class) )
+            return fromValue;
+
+        if ( Character.class.equals(fromType) && toType.equals(int.class) )
+            return Integer.valueOf((int) ((Character) fromValue).charValue());
+
+        if ( Character.class.equals(fromType) && toType.equals(long.class) )
+            return Long.valueOf((long) ((Character) fromValue).charValue());
+
+        if ( Character.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Character) fromValue).charValue());
+
+        if ( Character.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Character) fromValue).charValue());
+
+        if ( Integer.class.equals(fromType) && toType.equals(byte.class) )
+            return Byte.valueOf((byte) ((Integer) fromValue).intValue());
+
+        if ( Integer.class.equals(fromType) && toType.equals(short.class) )
+            return Short.valueOf((short) ((Integer) fromValue).intValue());
+
+        if ( Integer.class.equals(fromType) && toType.equals(char.class) )
+            return Character.valueOf((char) ((Integer) fromValue).intValue());
+
+        if ( Integer.class.equals(fromType) && toType.equals(int.class) )
+            return fromValue;
+
+        if ( Integer.class.equals(fromType) && toType.equals(long.class) )
+            return Long.valueOf((long) ((Integer) fromValue).intValue());
+
+        if ( Integer.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Integer) fromValue).intValue());
+
+        if ( Integer.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Integer) fromValue).intValue());
+
+        if ( Long.class.equals(fromType) && toType.equals(byte.class) )
+            return Byte.valueOf((byte) ((Long) fromValue).longValue());
+
+        if ( Long.class.equals(fromType) && toType.equals(short.class) )
+            return Short.valueOf((short) ((Long) fromValue).longValue());
+
+        if ( Long.class.equals(fromType) && toType.equals(char.class) )
+            return Character.valueOf((char) ((Long) fromValue).longValue());
+
+        if ( Long.class.equals(fromType) && toType.equals(int.class) )
+            return Integer.valueOf((int) ((Long) fromValue).longValue());
+
+        if ( Long.class.equals(fromType) && toType.equals(long.class) )
+            return fromValue;
+
+        if ( Long.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Long) fromValue).longValue());
+
+        if ( Long.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Long) fromValue).longValue());
+
+        if ( Float.class.equals(fromType) && toType.equals(byte.class) )
+            return Byte.valueOf((byte) ((Float) fromValue).floatValue());
+
+        if ( Float.class.equals(fromType) && toType.equals(short.class) )
+            return Short.valueOf((short) ((Float) fromValue).floatValue());
+
+        if ( Float.class.equals(fromType) && toType.equals(char.class) )
+            return Character.valueOf((char) ((Float) fromValue).floatValue());
+
+        if ( Float.class.equals(fromType) && toType.equals(int.class) )
+            return Integer.valueOf((int) ((Float) fromValue).floatValue());
+
+        if ( Float.class.equals(fromType) && toType.equals(long.class) )
+            return Long.valueOf((long) ((Float) fromValue).floatValue());
+
+        if ( Float.class.equals(fromType) && toType.equals(float.class) )
+            return fromValue;
+
+        if ( Float.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Float) fromValue).floatValue());
+
+        if ( Double.class.equals(fromType) && toType.equals(byte.class) )
+            return Byte.valueOf((byte) ((Double) fromValue).doubleValue());
+
+        if ( Double.class.equals(fromType) && toType.equals(short.class) )
+            return Short.valueOf((short) ((Double) fromValue).doubleValue());
+
+        if ( Double.class.equals(fromType) && toType.equals(char.class) )
+            return Character.valueOf((char) ((Double) fromValue).doubleValue());
+
+        if ( Double.class.equals(fromType) && toType.equals(int.class) )
+            return Integer.valueOf((int) ((Double) fromValue).doubleValue());
+
+        if ( Double.class.equals(fromType) && toType.equals(long.class) )
+            return Long.valueOf((long) ((Double) fromValue).doubleValue());
+
+        if ( Double.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Double) fromValue).doubleValue());
+
+        if ( Double.class.equals(fromType) && toType.equals(double.class) )
+            return fromValue;
+
+        throw new IllegalArgumentException("Can't cast [" + fromValue + "] to " + toType);
+    }
+
+    /** Unbox, do primitive widening conversion (JLS 5.1.2) and box */
+    public static Object convert(Object fromValue, Class<?> toType) {
+        Class<?> fromType = fromValue.getClass();
+
+        if ( Byte.class.equals(fromType) && toType.equals(byte.class) )
+            return fromValue;
+
+        if ( Short.class.equals(fromType) && toType.equals(short.class) )
+            return fromValue;
+
+        if ( Byte.class.equals(fromType) && toType.equals(short.class) )
+            return Short.valueOf((short) ((Byte) fromValue).byteValue());
+
+        if ( Integer.class.equals(fromType) && toType.equals(int.class) )
+            return fromValue;
+
+        if ( Byte.class.equals(fromType) && toType.equals(int.class) )
+            return Integer.valueOf((int) ((Byte) fromValue).byteValue());
+
+        if ( Short.class.equals(fromType) && toType.equals(int.class) )
+            return Integer.valueOf((int) ((Short) fromValue).shortValue());
+
+        if ( Character.class.equals(fromType) && toType.equals(int.class) )
+            return Integer.valueOf((int) ((Character) fromValue).charValue());
+
+        if ( Long.class.equals(fromType) && toType.equals(long.class) )
+            return fromValue;
+
+        if ( Byte.class.equals(fromType) && toType.equals(long.class) )
+            return Long.valueOf((long) ((Byte) fromValue).byteValue());
+
+        if ( Short.class.equals(fromType) && toType.equals(long.class) )
+            return Long.valueOf((long) ((Short) fromValue).shortValue());
+
+        if ( Character.class.equals(fromType) && toType.equals(long.class) )
+            return Long.valueOf((long) ((Character) fromValue).charValue());
+
+        if ( Integer.class.equals(fromType) && toType.equals(long.class) )
+            return Long.valueOf((long) ((Integer) fromValue).intValue());
+
+        if ( Float.class.equals(fromType) && toType.equals(float.class) )
+            return fromValue;
+
+        if ( Byte.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Byte) fromValue).byteValue());
+
+        if ( Short.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Short) fromValue).shortValue());
+
+        if ( Character.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Character) fromValue).charValue());
+
+        if ( Integer.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Integer) fromValue).intValue());
+
+        if ( Long.class.equals(fromType) && toType.equals(float.class) )
+            return Float.valueOf((float) ((Long) fromValue).longValue());
+
+        if ( Double.class.equals(fromType) && toType.equals(double.class) )
+            return fromValue;
+
+        if ( Byte.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Byte) fromValue).byteValue());
+
+        if ( Short.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Short) fromValue).shortValue());
+
+        if ( Character.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Character) fromValue).charValue());
+
+        if ( Integer.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Integer) fromValue).intValue());
+
+        if ( Long.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Long) fromValue).longValue());
+
+        if ( Float.class.equals(fromType) && toType.equals(double.class) )
+            return Double.valueOf((double) ((Float) fromValue).floatValue());
+
+        throw new IllegalArgumentException("Can't convert [" + fromValue + "] to " + toType);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/PrimitiveTypeConverter.jmpp	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+public class PrimitiveTypeConverter {
+
+    /** Unbox, cast and box */
+    public static Object cast(Object fromValue, Class<?> toType) {
+
+        Class<?> fromType = fromValue.getClass();
+#
+# String[] ptypes = new String[] { "byte", "short", "char", "int", "long", "float", "double" };
+# String[] btypes = new String[] { "Byte", "Short", "Character", "Integer", "Long", "Float", "Double" };
+#
+# for ( int f = 0; f < ptypes.length; f++ ) {
+#   String fb = btypes[f];
+#   String fp = ptypes[f];
+#   for ( int t = 0; t < ptypes.length; t++ ) {
+#     String tp = ptypes[t];
+#     String tb = btypes[t];
+
+        if ( @fb.class.equals(fromType) && toType.equals(@tp.class) )
+#
+#     if ( f == t ) {
+#
+            return fromValue;
+#
+#     } else {
+#
+            return @tb.valueOf((@tp) ((@fb) fromValue).@(fp)Value());
+#
+#     }
+#   }
+# }
+
+        throw new IllegalArgumentException("Can't cast [" + fromValue + "] to " + toType);
+    }
+
+    /** Unbox, do primitive widening conversion (JLS 5.1.2) and box */
+    public static Object convert(Object fromValue, Class<?> toType) {
+        Class<?> fromType = fromValue.getClass();
+#
+# for ( int t = 0; t < ptypes.length; t++ ) {
+#   String tp = ptypes[t];
+#   String tb = btypes[t];
+#
+#   if ( tp.equals("char") ) continue;
+#
+
+        if ( @tb.class.equals(fromType) && toType.equals(@tp.class) )
+            return fromValue;
+#
+#   for ( int f = 0; f < t; f++ ) {
+#     String fp = ptypes[f];
+#     String fb = btypes[f];
+
+        if ( @fb.class.equals(fromType) && toType.equals(@tp.class) )
+            return @tb.valueOf((@tp) ((@fb) fromValue).@(fp)Value());
+#   }
+# }
+
+        throw new IllegalArgumentException("Can't convert [" + fromValue + "] to " + toType);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomArgumentGen.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+public class RandomArgumentGen {
+
+    public static Argument next() throws InstantiationException, IllegalAccessException {
+        return next(RandomTypeGen.next());
+    }
+
+    public static Argument next(Class<?> type) throws InstantiationException, IllegalAccessException {
+        return new Argument(type, RandomValueGen.next(type));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomArgumentsGen.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+import java.lang.invoke.MethodType;
+
+public final class RandomArgumentsGen {
+
+    public static Argument[] createRandomArgs(boolean isVirtual, final MethodType mt) {
+        return Arguments.fromMethodType(isVirtual, mt, new MethodParameterValueProvider() {
+            @Override
+            public Object getValue(MethodType t, int paramNum) {
+                try {
+                    return RandomValueGen.next(t.parameterType(paramNum));
+                } catch (Exception e) {
+                    return null;
+                }
+            }
+        });
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomMTGen.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.Env;
+
+public class RandomMTGen {
+
+    private static final int MAX_ARGS = 10;
+
+    public static MethodType generateRandomMT() {
+        Class<?> rtype = RandomTypeGen.next();
+        Class<?>[] ptypes = new Class<?>[Env.getRNG().nextInt(MAX_ARGS)];
+        for ( int i = 0; i < ptypes.length; i++ ) {
+            ptypes[i] = RandomTypeGen.next();
+        }
+
+        return MethodType.methodType(rtype, ptypes);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomTypeGen.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+import vm.mlvm.share.Env;
+
+public class RandomTypeGen {
+
+    public static Class<?> next() {
+        return TestTypes.TYPES[Env.getRNG().nextInt(TestTypes.TYPES.length)];
+    }
+
+    public static void main(String[] args) {
+        for (int i = 0; i < 10; i++)
+            System.out.println(next());
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/RandomValueGen.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+public class RandomValueGen {
+
+    private static final int MAX_DISTINCT_TRIES = 11;
+
+    /*
+     * Primitive values are returned boxed. void is returned as null String
+     * contains 0..100 random characters
+     */
+    public static Object next(Class<?> type) throws InstantiationException, IllegalAccessException {
+        return TestTypes.nextRandomValueForType(type);
+    }
+
+    public static Object nextDistinct(Class<?> type, Object notEqualTo) throws InstantiationException, IllegalAccessException {
+        Object nonEqualValue;
+        for ( int i = MAX_DISTINCT_TRIES; i > 0; i -- ){
+            nonEqualValue = next(type);
+            if ( ! nonEqualValue.equals(notEqualTo) )
+                return nonEqualValue;
+        }
+
+        // A workaround for booleans. Sometimes RNG produces long series of trues or falses
+        if ( type.equals(Boolean.class) || type.equals(boolean.class) )
+            return new Boolean(! (Boolean) notEqualTo);
+
+        throw new InstantiationException("Can't create distinct value for type=[" + type.getName() + "]; value=[" + notEqualTo + "]");
+    }
+
+    public static void main(String[] args) {
+        for (int i = 0; i < 10; i++) {
+            Class<?> type = RandomTypeGen.next();
+            Object value;
+            try {
+                value = next(type);
+                System.out.println("type=[" + type + "], value=[" + value + "]");
+            } catch (Exception e) {
+                System.err.println("type=[" + type + "]");
+                e.printStackTrace();
+            }
+        }
+    }
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/SimpleOpMethodHandles.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+public class SimpleOpMethodHandles {
+
+    public static boolean eq(Object o1, Object o2) {
+        return o1.equals(o2);
+    }
+
+    public static boolean not(boolean a) {
+        return ! a;
+    }
+
+    public static MethodHandle notMH() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(SimpleOpMethodHandles.class, "not", MethodType.methodType(boolean.class, boolean.class));
+    }
+
+    public static MethodHandle eqMH() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(SimpleOpMethodHandles.class, "eq", MethodType.methodType(boolean.class, Object.class, Object.class));
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/SimpleUnitTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.share.options.Option;
+
+public class SimpleUnitTest extends MlvmTest {
+
+    @Option(name = "failOnce", default_value = "false", description = "exit after the first failure")
+    private boolean failOnce = true;
+
+    public SimpleUnitTest() {}
+
+    public SimpleUnitTest test1(int a, float b) {
+        Env.traceNormal("test1(%d, %f) called", a, b);
+        return this;
+    }
+
+    private static SimpleUnitTest sut = new SimpleUnitTest();
+
+    public static SimpleUnitTest test2(int a, float b) {
+        Env.traceNormal("test2(%d, %f) called", a, b);
+        return sut;
+    }
+
+    public static int test3(int a) {
+        Env.traceNormal("test3(%d) called", a);
+        return a;
+    }
+
+    public void test4() {
+        Env.traceNormal("test4() called");
+    }
+
+    public SimpleUnitTest test5() {
+        Env.traceNormal("test5() called");
+        return this;
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+
+    @Override
+    public boolean run() throws Throwable {
+        try {
+            Argument retArg;
+            retArg = new Argument(SimpleUnitTest.class, sut);
+            retArg.setPreserved(true);
+
+            Argument intArg = new Argument(int.class, new Integer(1));
+
+            for ( ;; ) {
+                try {
+                    switch ( Env.getRNG().nextInt(5) ) {
+                    case 0:
+                        MHTransformationGen.createAndCallSequence(
+                            retArg,
+                            sut,
+                            MethodHandles.lookup().findVirtual(
+                                    SimpleUnitTest.class,
+                                    "test1",
+                                    MethodType.methodType(SimpleUnitTest.class, int.class, float.class)
+                            ),
+                            new Argument[] { new Argument(int.class, new Integer(1)), new Argument(float.class, new Float(1.0)) },
+                            true);
+                        break;
+
+                    case 1:
+                        MHTransformationGen.createAndCallSequence(
+                                retArg,
+                                null,
+                                MethodHandles.lookup().findStatic(
+                                        SimpleUnitTest.class,
+                                        "test2",
+                                        MethodType.methodType(SimpleUnitTest.class, int.class, float.class)
+                                ),
+                                new Argument[] { new Argument(int.class, new Integer(1)), new Argument(float.class, new Float(1.0)) },
+                                true);
+                            break;
+
+                    case 2:
+                        MHTransformationGen.createAndCallSequence(
+                                intArg,
+                                null,
+                                MethodHandles.lookup().findStatic(
+                                        SimpleUnitTest.class,
+                                        "test3",
+                                        MethodType.methodType(int.class, int.class)
+                                ),
+                                new Argument[] { intArg },
+                                true);
+                            break;
+
+                    case 3:
+                        MHTransformationGen.createAndCallSequence(
+                                new Argument(void.class, null),
+                                sut,
+                                MethodHandles.lookup().findVirtual(
+                                        SimpleUnitTest.class,
+                                        "test4",
+                                        MethodType.methodType(void.class)
+                                ),
+                                new Argument[0],
+                                false);
+                            break;
+
+                    default:
+                        MHTransformationGen.createAndCallSequence(
+                                retArg,
+                                sut,
+                                MethodHandles.lookup().findVirtual(
+                                        SimpleUnitTest.class,
+                                        "test5",
+                                        MethodType.methodType(SimpleUnitTest.class)
+                                ),
+                                new Argument[0],
+                                true);
+                            break;
+
+                    }
+                } catch ( Throwable e ) {
+                    Env.getLog().complain("Caught exception", e);
+                    if ( failOnce )
+                        return false;
+                }
+            }
+        } catch ( Throwable t ) {
+            t.printStackTrace();
+            return false;
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/TestTypes.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,313 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import nsk.share.test.TestUtils;
+import vm.mlvm.share.Env;
+
+public class TestTypes {
+
+    public static final Class<?>[] TYPES = {
+        // void.class
+        boolean.class, byte.class, char.class, short.class, int.class, long.class,
+        float.class, double.class, Object.class, String.class
+    };
+
+    public static final Map<Class<?>, Class<?>> BOX_MAP = new HashMap<Class<?>, Class<?>>();
+    public static final Map<Class<?>, Class<?>> UNBOX_MAP = new HashMap<Class<?>, Class<?>>();
+    static {
+        BOX_MAP.put(boolean.class, Boolean.class);
+        BOX_MAP.put(byte.class, Byte.class);
+        BOX_MAP.put(char.class, Character.class);
+        BOX_MAP.put(short.class, Short.class);
+        BOX_MAP.put(int.class, Integer.class);
+        BOX_MAP.put(long.class, Long.class);
+        BOX_MAP.put(float.class, Float.class);
+        BOX_MAP.put(double.class, Double.class);
+
+        for ( Entry<Class<?>, Class<?>> e : BOX_MAP.entrySet() ) {
+            UNBOX_MAP.put(e.getValue(), e.getKey());
+        }
+    }
+
+    public static final Class<?>[] PRIMITIVE_WIDENING_HIERARCHY = {
+        byte.class, short.class, char.class, int.class, long.class, float.class, double.class
+    };
+
+    public static boolean isBoxedType(Class<?> type) {
+        return BOX_MAP.values().contains(type);
+    }
+
+    private static void addPrimitiveAndBoxed(List<Class<?>> list, Class<?> type) {
+        list.add(type);
+        list.add(BOX_MAP.get(type));
+    }
+
+    /**
+     * WPC = JLS 5.1.2 Widening Primitive Conversions
+     * @param type
+     * @return
+     */
+    private static void addWPCAssignableTypesFor(List<Class<?>> result, Class<?> type) {
+        if ( type.equals(short.class) ) {
+            addPrimitiveAndBoxed(result, byte.class);
+        }
+
+        if ( type.equals(int.class) || type.equals(long.class) || type.equals(float.class) || type.equals(double.class) ) {
+            for ( int p = 0; p < PRIMITIVE_WIDENING_HIERARCHY.length; p++ ) {
+                Class<?> c = PRIMITIVE_WIDENING_HIERARCHY[p];
+                addPrimitiveAndBoxed(result, c);
+
+                if ( c.equals(type) )
+                    break;
+            }
+        }
+    }
+
+    /**
+     * NPC = JLS 5.1.3 Narrowing Primitive Conversions
+     *     + JLS 5.1.4 Widening and Narrowing Primitive Conversions
+     */
+    private static void addNPCAssignableTypesFor(List<Class<?>> result, Class<?> type) {
+        // JLS 5.1.4
+        if ( type.equals(char.class) ) {
+            addPrimitiveAndBoxed(result, byte.class);
+        }
+
+        // JLS 5.1.3
+        int p = 0;
+        for ( ; p < PRIMITIVE_WIDENING_HIERARCHY.length; p++ ) {
+            if ( PRIMITIVE_WIDENING_HIERARCHY[p].equals(type) )
+                break;
+        }
+
+        for ( ; p < PRIMITIVE_WIDENING_HIERARCHY.length; p++ ) {
+            addPrimitiveAndBoxed(result, PRIMITIVE_WIDENING_HIERARCHY[p]);
+        }
+    }
+
+    public static Class<?>[] getAssignableTypesFor(Class<?> type) {
+        if ( type.equals(void.class) )
+            return new Class<?>[0];
+
+        if ( type.isPrimitive() ) {
+            List<Class<?>> result = new LinkedList<Class<?>>();
+            addPrimitiveAndBoxed(result, type);
+            addWPCAssignableTypesFor(result, type);
+            return (Class<?>[]) result.toArray();
+        }
+
+        if ( type.equals(Object.class) )
+            return new Class<?>[] { Object.class, String.class };
+
+        if ( type.equals(String.class) )
+            return new Class<?>[] { String.class };
+
+        throw new IllegalArgumentException("Don't know how to handle type " + type);
+    }
+
+    public static Class<?>[] getExplicitlyCastTypesFor(Class<?> type) {
+        return TYPES;
+    }
+
+    public static boolean canConvertType(Class<?> from, Class<?> to, boolean isRetType) {
+        return (Boolean) convert(from, null, to, isRetType, true);
+    }
+
+    public static boolean canExplicitlyCastType(Class<?> from, Class<?> to, boolean isRetType) {
+        return true; // TODO: can use explicitCaseArguments() to convert "from" to "to"
+    }
+
+    /** convert an argument according to the rules defined in MethodHandles.convertArguments() */
+    public static Argument convertArgument(Argument from, Class<?> toType, boolean isRetType) throws ClassCastException {
+        Class<?> fromType = from.getType();
+
+        if ( fromType.equals(toType) )
+            return from;
+
+        Object toValue = convert(fromType, from.getValue(), toType, isRetType, false);
+        return new Argument(toType, toValue, from.isPreserved(), from.getTag());
+    }
+
+    /** convert an argument according to the rules defined in MethodHandles.convertArguments() */
+    private static Object convert(Class<?> fromType, Object fromValue, Class<?> toType, boolean isRetType, boolean dryRun) {
+        if ( ! dryRun ) {
+            if ( ! fromType.isPrimitive() )
+                TestUtils.assertTrue(fromType.isAssignableFrom(fromValue.getClass()), "fromType " + fromType + " is not assignable from the type of fromValue " + fromValue);
+            else
+                TestUtils.assertTrue(BOX_MAP.get(fromType).isAssignableFrom(fromValue.getClass()), "Boxed fromType " + fromType + " is not assignable from the type of fromValue " + fromValue);
+        }
+
+        // JLS 5.1.1 Identity conversion
+        if ( fromType.equals(toType) )
+            return dryRun ? Boolean.TRUE : fromValue;
+
+        Class<?> exactFromType = fromValue.getClass();
+
+        Throwable cause = null;
+
+        try {
+            if ( isRetType ) {
+                // If the return type T1 is void, any returned value is discarded
+                if ( toType.equals(void.class) )
+                    return dryRun ? true : null;
+
+                // If the return type T0 is void and T1 a reference, a null value is introduced.
+                if ( fromType.equals(void.class) && ! toType.isPrimitive() )
+                    return dryRun ? true : null;
+
+                // If the return type T0 is void and T1 a primitive, a zero value is introduced.
+                if ( fromType.equals(void.class) && toType.isPrimitive() ) {
+                    return dryRun ? true : BOX_MAP.get(toType).newInstance();
+                }
+            }
+
+            // If T0 and T1 are references, then a cast to T1 is applied.
+            // (The types do not need to be related in any particular way.)
+            if ( ! fromType.isPrimitive() && ! toType.isPrimitive() ) {
+                return dryRun ? toType.isAssignableFrom(fromType)
+                              : toType.cast(fromValue);
+            }
+
+            // If T0 and T1 are primitives, then a Java method invocation conversion
+            // (JLS 5.3) is applied, if one exists.
+            if ( fromType.isPrimitive() && toType.isPrimitive() ) {
+                if ( dryRun ) {
+                    for ( Class<?> tt : getAssignableTypesFor(toType) ) {
+                        if ( tt.equals(fromType) )
+                            return true;
+                    }
+
+                    return false;
+                } else {
+                    return PrimitiveTypeConverter.convert(fromValue, toType);
+                }
+            }
+
+            // If T0 is a primitive and T1 a reference, a boxing conversion is applied
+            // if one exists, possibly followed by a reference conversion to a superclass.
+            // T1 must be a wrapper class or a supertype of one.
+            if ( fromType.isPrimitive() && ! toType.isPrimitive() ) {
+                return dryRun ? toType.isAssignableFrom(BOX_MAP.get(fromType))
+                              : toType.cast(fromType.cast(fromValue));
+            }
+
+            // If T0 is a reference and T1 a primitive, an unboxing conversion will be applied
+            // at runtime, possibly followed by a Java method invocation conversion (JLS 5.3)
+            // on the primitive value. (These are the widening conversions.) T0 must be
+            // a wrapper class or a supertype of one. (In the case where T0 is Object,
+            // these are the conversions allowed by java.lang.reflect.Method.invoke.)
+            if ( ! fromType.isPrimitive() && toType.isPrimitive() ) {
+                if ( dryRun ) {
+                    if ( ! BOX_MAP.values().contains(exactFromType) )
+                        return false;
+
+
+                }
+
+                return dryRun ? toType.isAssignableFrom(BOX_MAP.get(fromType))
+                              : toType.cast(fromType.cast(fromValue));
+            }
+
+        } catch ( Throwable t ) {
+            cause = t;
+        }
+
+        if ( dryRun )
+            return Boolean.FALSE;
+        else
+            throw (ClassCastException) (new ClassCastException("Can't convert value [" + fromValue + "] from type [" + fromType + "] to type [" + toType + "]")).initCause(cause);
+    }
+
+    public static Argument explicitCastArgument(Argument from, Class<?> toType, boolean isRetType) {
+        return from; // TODO
+    }
+
+    public static Object nextRandomValueForType(Class<?> type) throws InstantiationException, IllegalAccessException {
+        if (type.equals(void.class))
+            return null;
+
+        if (type.equals(boolean.class) || type.equals(Boolean.class))
+            return new Boolean(Env.getRNG().nextInt(2) == 0);
+
+        if (type.equals(byte.class) || type.equals(Byte.class))
+            return new Byte((byte) Env.getRNG().nextInt(1 << Byte.SIZE));
+
+        if (type.equals(int.class) || type.equals(Integer.class))
+            return new Integer(Env.getRNG().nextInt());
+
+        if (type.equals(short.class) || type.equals(Short.class))
+            return new Short((short) Env.getRNG().nextInt(1 << Short.SIZE));
+
+        if (type.equals(long.class) || type.equals(Long.class))
+            return new Long(Env.getRNG().nextLong());
+
+        if (type.equals(float.class) || type.equals(Float.class))
+            return new Float(Env.getRNG().nextFloat());
+
+        if (type.equals(double.class) || type.equals(Double.class))
+            return new Double(Env.getRNG().nextDouble());
+
+        if (type.equals(char.class) || type.equals(Character.class))
+            return new Character((char) (32 + Env.getRNG().nextInt(96)));
+
+        if (type.equals(Object.class))
+            return new Object();
+
+        if (type.equals(String.class)) {
+            StringBuilder sb = new StringBuilder();
+            for (int i = Env.getRNG().nextInt(100); i > 0; i--)
+                sb.append(nextRandomValueForType(char.class));
+            return sb.toString();
+        }
+
+        throw new IllegalArgumentException("Don't know how to handle type " + type);
+    }
+
+    public static int getSlotsCount(Class<?> type) {
+        if (type.equals(void.class))
+            return 0;
+
+        if ( type.equals(boolean.class) || type.equals(Boolean.class)
+          || type.equals(byte.class) || type.equals(Byte.class)
+          || type.equals(int.class) || type.equals(Integer.class)
+          || type.equals(short.class) || type.equals(Short.class)
+          || type.equals(float.class) || type.equals(Float.class)
+          || type.equals(char.class) || type.equals(Character.class)
+          || Object.class.isAssignableFrom(type) )
+            return 1;
+
+        if ( type.equals(long.class) || type.equals(Long.class)
+          || type.equals(double.class) || type.equals(Double.class))
+            return 2;
+
+        throw new IllegalArgumentException("Don't know how to handle type " + type);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArrayEnvelopeTFPair.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.reflect.Array;
+
+import vm.mlvm.meth.share.Argument;
+
+public class MHArrayEnvelopeTFPair extends MHEnvelopeArgTFPair {
+
+    public MHArrayEnvelopeTFPair(MHCall outboundTarget, int argNum, int arrayIdx, int arraySize) {
+        super(outboundTarget,
+              "ArrayGetSet_" + outboundTarget.hashCode(),
+              argNum,
+              getLocatorArg(arrayIdx),
+              getEnvelopeArg(outboundTarget.getArgs()[argNum], arrayIdx, arraySize));
+
+        if ( arrayIdx > arraySize )
+            throw new IllegalArgumentException("Array index [" + arrayIdx + "] should be less than array size [" + arraySize + "]");
+    }
+
+    private static Argument getLocatorArg(int arrayIdx) {
+        return new Argument(int.class, arrayIdx);
+    }
+
+    private static Argument getEnvelopeArg(Argument componentArg, int arrayIdx, int arraySize) {
+        Object array = Array.newInstance(componentArg.getType(), arraySize);
+        Array.set(array, arrayIdx, componentArg.getValue());
+        return new Argument(array.getClass(), array);
+    }
+
+    @Override
+    protected MHTF computeGetTF(Argument envelopeArg, Argument envelopeLocatorArg) {
+        return new MHArrayGetElemTF(envelopeArg, envelopeLocatorArg);
+    }
+
+    @Override
+    protected MHTF computeSetTF(Argument envelopeArg, Argument envelopeLocatorArg, Argument componentArg) {
+        return new MHArraySetElemTF(envelopeArg, envelopeLocatorArg, componentArg);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArrayGetElemTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Array;
+
+import vm.mlvm.meth.share.Argument;
+
+public class MHArrayGetElemTF extends MHNullaryTF {
+
+    private final Argument arrayArg;
+    private final Argument idxArg;
+    private final int idx;
+
+    public MHArrayGetElemTF(Argument array, Argument idxArg) {
+        this.arrayArg = array;
+        this.idxArg = idxArg;
+        this.idx = (Integer) idxArg.getValue();
+    }
+
+    @Override
+    protected void check() throws IllegalArgumentException {
+        if ( ! this.arrayArg.getType().isArray() )
+            throw new IllegalArgumentException("Argument " + this.arrayArg + " should be an array!");
+
+        if ( ! this.idxArg.getType().equals(int.class) )
+            throw new IllegalArgumentException("Argument " + this.idxArg + " should be of type int!");
+
+        if ( this.idx < 0 || this.idx >= Array.getLength(this.arrayArg.getValue()) )
+            throw new IllegalArgumentException("Index " + this.idxArg + " is out of bounds for array " + this.arrayArg);
+    }
+
+    @Override
+    protected Argument computeRetVal() {
+        return new Argument(this.arrayArg.getType().getComponentType(), Array.get(this.arrayArg.getValue(), idx));
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs() {
+        return new Argument[] { arrayArg, idxArg };
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() {
+        return MethodHandles.arrayElementGetter(this.arrayArg.getType());
+    }
+
+    @Override
+    protected String getName() {
+        return "arrayElementGetter";
+    }
+
+    @Override
+    protected String getDescription() {
+        return "array=" + this.arrayArg + "; idx=" + this.idxArg;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHArraySetElemTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Array;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHUtils;
+
+public class MHArraySetElemTF extends MHNullaryTF {
+
+    private final Argument arrayArg;
+    private final Argument idxArg;
+    private final int idx;
+    private final Argument newValueArg;
+
+    public MHArraySetElemTF(Argument array, Argument idxArg, Argument newValue) {
+        this.arrayArg = array;
+        this.idxArg = idxArg;
+        this.idx = (Integer) idxArg.getValue();
+        this.newValueArg = newValue;
+    }
+
+    @Override
+    protected void check() throws IllegalArgumentException {
+        if ( ! this.arrayArg.getType().isArray() )
+            throw new IllegalArgumentException("Argument " + this.arrayArg + " should be an array!");
+
+        if ( ! this.idxArg.getType().equals(int.class) )
+            throw new IllegalArgumentException("Argument " + this.idxArg + " should be of type int!");
+
+        if ( this.idx < 0 || this.idx >= Array.getLength(this.arrayArg.getValue()) )
+            throw new IllegalArgumentException("Index " + this.idx + " is out of bounds for array " + this.arrayArg);
+
+        MHUtils.assertAssignableType("Can't assign new value to array", this.arrayArg.getType().getComponentType(), this.newValueArg.getType());
+    }
+
+    @Override
+    protected Argument computeRetVal() {
+        return new Argument(void.class, null);
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs() {
+        return new Argument[] { this.arrayArg, this.idxArg, this.newValueArg };
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() {
+        return MethodHandles.arrayElementSetter(this.arrayArg.getType());
+    }
+
+    @Override
+    protected String getName() {
+        return "arrayElementSetter";
+    }
+
+    @Override
+    protected String getDescription() {
+        return "array=" + this.arrayArg + "; idx=" + this.idxArg + "; newValue=" + this.newValueArg;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHBasicUnaryTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+
+import vm.mlvm.meth.share.Argument;
+
+public abstract class MHBasicUnaryTF extends MHUnaryTF {
+
+    protected MHBasicUnaryTF(final MHCall target) {
+        super(target);
+    }
+
+    // Syntax sugar
+
+    @Override
+    protected void check() throws IllegalArgumentException {
+        check(getTargetCall().getArgs());
+    }
+
+    @Override
+    protected Argument computeRetVal() {
+        return computeRetVal(getTargetCall().getRetVal());
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs() {
+        return computeInboundArgs(getTargetCall().getArgs());
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() throws NoSuchMethodException, IllegalAccessException {
+        return computeInboundMH(getTargetCall().getTargetMH());
+    }
+
+    protected void check(Argument[] targetArgs) throws IllegalArgumentException {
+    }
+
+    protected Argument computeRetVal(Argument targetRetVal) {
+        return targetRetVal;
+    }
+
+    protected Argument[] computeInboundArgs(Argument[] targetArgs) {
+        return targetArgs;
+    }
+
+    protected MethodHandle computeInboundMH(MethodHandle targetMH) throws NoSuchMethodException, IllegalAccessException {
+        return targetMH;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHBindTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import vm.mlvm.meth.share.Argument;
+
+public class MHBindTF extends MHInsertTF {
+
+    protected MHBindTF(MHCall target, Argument bindToValue, boolean canDropProtected) {
+        super(target, 0, new Argument[] { bindToValue }, canDropProtected);
+    }
+
+    @Override
+    protected String getName() {
+        return "bindTo";
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCall.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.Arrays;
+
+import nsk.share.test.LazyObjectArrayToString;
+import nsk.share.test.LazyFormatString;
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.Arguments;
+import vm.mlvm.meth.share.MHUtils;
+import vm.mlvm.share.Env;
+
+public class MHCall {
+
+    private static final boolean TRACE = false;
+    private static final boolean TRACE_COMPLAIN_VALUE_MISMATCHES = false;
+
+    private final MHTF _target;
+    private final Argument[] _args;
+    private final Argument _retVal;
+    private final MethodHandle _targetMH;
+
+    MHCall(Argument retVal, MHTF target, MethodHandle targetMH, Argument[] args) {
+        _args = args;
+        _target = target;
+        _retVal = retVal;
+
+        if ( TRACE ) {
+            try {
+                targetMH = MethodHandles.explicitCastArguments(
+                        MethodHandles.lookup().findVirtual(MHCall.class, "trace", MethodType.methodType(Object.class, MethodHandle.class, Object[].class))
+                        .bindTo(this)
+                        .bindTo(targetMH.asSpreader(Object[].class, targetMH.type().parameterCount()))
+                        .asCollector(Object[].class, targetMH.type().parameterCount()),
+                        targetMH.type());
+            } catch ( Exception e ) {
+                Env.complain(e, "Can't add tracing to MHCall %s", this);
+            }
+        }
+
+        _targetMH = targetMH;
+        Env.traceDebug("Created MHCall: %s", this);
+    }
+
+    @SuppressWarnings("unused")
+    private Object trace(MethodHandle targetMH, Object[] args) throws Throwable {
+        try {
+            Env.traceNormal("Invoking %s\n\t\targuments=%s", _target, new LazyObjectArrayToString(args));
+
+            for ( int i = 0; i < args.length; i++ ) {
+                Object actualArg = args[i];
+                Object goldenArg = _args[i].getValue();
+                if ( actualArg != null && ! actualArg.equals(goldenArg) || actualArg == null && goldenArg != null ) {
+                    if ( TRACE_COMPLAIN_VALUE_MISMATCHES )
+                        Env.complain("\t\tArgument " + i + " mismatch: actual=%s, required=%s", actualArg, goldenArg);
+                    else
+                        Env.traceNormal("\t\tArgument " + i + " mismatch: actual=%s, required=%s", actualArg, goldenArg);
+                }
+            }
+
+            Object result = targetMH.invoke((Object[]) args);
+
+            Env.traceNormal("Returning from %s\n\t\tresult=%s", _target, result);
+
+            Object requiredRetVal = _retVal.getValue();
+            if ( result != null && ! result.equals(requiredRetVal) || result == null && requiredRetVal != null ) {
+                if ( TRACE_COMPLAIN_VALUE_MISMATCHES )
+                    Env.complain("\t\tResult mismatch: actual=%s, required=%s", result, requiredRetVal);
+                else
+                    Env.traceNormal("\t\tResult mismatch: actual=%s, required=%s", result, requiredRetVal);
+            }
+
+            return result;
+        } catch ( Throwable t ){
+            Env.traceNormal(t, "Exception caught after calling %s", _target);
+            throw t;
+        }
+    }
+
+    public Argument getRetVal() {
+        return _retVal;
+    }
+
+    /**
+     * @return May return null if target is not a transformation (but, say, a user's MH)
+     */
+    public MHTF getTarget() {
+        return _target;
+    }
+
+    public MethodHandle getTargetMH() {
+        return _targetMH;
+    }
+
+    public Argument[] getArgs() {
+        return _args;
+    }
+
+    public void check() throws IllegalArgumentException {
+        MethodType mt = _targetMH.type();
+        for ( int i = 0; i < mt.parameterCount(); i++ ) {
+            MHUtils.assertAssignableType(new LazyFormatString("argument %i in %s", i, this), mt.parameterType(i), _args[i].getType());
+        }
+
+        MHUtils.assertAssignableType(new LazyFormatString("return type in %s", this), mt.returnType(), _retVal.getType());
+    }
+
+    public Object call() throws Throwable {
+        if ( ! _retVal.getType().equals(void.class) )
+            return (Object) _targetMH.invokeWithArguments(Arguments.valuesArray(_args));
+        else {
+            _targetMH.invokeWithArguments(Arguments.valuesArray(_args));
+            return null;
+        }
+    }
+
+    public Object callAndCheckRetVal() throws Throwable {
+        Object r = call();
+
+        if ( ! _retVal.getType().equals(void.class) && ! r.equals(_retVal.getValue()) )
+            throw new IllegalArgumentException("Call returned wrong value: "
+                    + "actual=" + r
+                    + "; expected=" + _retVal.getValue());
+        return r;
+    }
+
+    @Override
+    public String toString() {
+        return "MHCall: target=" + _target + "; args=" + Arrays.toString(_args) + "; retVal=" + _retVal + "; targetMH=" + _targetMH;
+    }
+
+    String prettyPrint(String topPrefix, String subPrefix) {
+        return topPrefix + "MHCall:   target = " + _target + "\n"
+             + subPrefix + "       arguments = " + Arrays.toString(_args) + "\n"
+             + subPrefix + "       retVal    = " + _retVal + "\n"
+             + subPrefix + "       targetMH  = " + _targetMH;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCastTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.Arguments;
+import vm.mlvm.meth.share.TestTypes;
+
+public abstract class MHCastTF extends MHBasicUnaryTF {
+
+    protected final Argument[] newArgs;
+    protected final Argument newRetVal;
+    protected final MethodType newMT;
+
+    protected MHCastTF(MHCall target, Class<?> newRetType, Class<?>[] newArgTypes) {
+        super(target);
+
+        Argument[] targetArgs = target.getArgs();
+
+        if ( newArgTypes.length != targetArgs.length )
+            throw new IllegalArgumentException("newArgTypes length (" + newArgTypes.length + ") should be equal to argument count (" + targetArgs.length + ")");
+
+        this.newArgs = new Argument[newArgTypes.length];
+        for ( int i = 0; i < this.newArgs.length; i++ ) {
+            if ( ! TestTypes.canConvertType(targetArgs[i].getType(), this.newArgs[i].getType(), false) )
+                throw new IllegalArgumentException("Can't convert argument #" + i + " from [" + targetArgs[i].getType() + " to [" + this.newArgs[i].getType());
+
+            this.newArgs[i] = convert(targetArgs[i], newArgTypes[i], false);
+        }
+
+        this.newRetVal = convert(target.getRetVal(), newRetType, true);
+
+        this.newMT = MethodType.methodType(this.newRetVal.getType(), Arguments.typesArray(this.newArgs));
+    }
+
+    protected abstract Argument convert(Argument argument, Class<?> newClass, boolean isRetType);
+
+    @Override
+    protected abstract MethodHandle computeInboundMH(MethodHandle targetMH) throws NoSuchMethodException, IllegalAccessException;
+
+    @Override
+    protected Argument[] computeInboundArgs(Argument[] targetArgs) {
+        return this.newArgs;
+    }
+
+    @Override
+    protected Argument computeRetVal(Argument targetRetVal) {
+        return this.newRetVal;
+    }
+
+    @Override
+    protected String getDescription() {
+        return "newRetVal=[" + this.newRetVal + "]; newArgs=[" + this.newArgs + "]";
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCollectSpreadBaseTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodType;
+
+public abstract class MHCollectSpreadBaseTF extends MHBasicUnaryTF {
+
+    public MHCollectSpreadBaseTF(MHCall target) {
+        super(target);
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH(MethodHandle targetMH) throws NoSuchMethodException, IllegalAccessException {
+        return computeCollectorMH(computeSpreaderMH(targetMH), targetMH.type());
+    }
+
+    protected abstract MethodHandle computeCollectorMH(MethodHandle spreaderMH, MethodType targetType);
+    protected abstract MethodHandle computeSpreaderMH(MethodHandle targetMH);
+
+    @Override
+    protected String getDescription() {
+        return "";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHCollectSpreadTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodType;
+
+public class MHCollectSpreadTF extends MHCollectSpreadBaseTF {
+
+    public MHCollectSpreadTF(MHCall target) {
+        super(target);
+    }
+
+    @Override
+    protected MethodHandle computeCollectorMH(MethodHandle spreaderMH, MethodType targetType) {
+        return spreaderMH.asCollector(Object[].class, targetType.parameterCount()).asType(targetType);
+    }
+
+    @Override
+    protected MethodHandle computeSpreaderMH(MethodHandle targetMH) {
+        return targetMH.asSpreader(Object[].class, targetMH.type().parameterCount());
+    }
+
+    @Override
+    protected String getName() {
+        return "CollectSpread";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHConstantTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+
+import vm.mlvm.meth.share.Argument;
+
+// TODO: cover widening/narrowing conversions
+public class MHConstantTF extends MHNullaryTF {
+
+    protected final Argument retVal;
+
+    public MHConstantTF(Argument retVal) {
+        this.retVal = retVal;
+    }
+
+    @Override
+    protected void check() throws IllegalArgumentException {
+    }
+
+    @Override
+    protected Argument computeRetVal() {
+        return this.retVal;
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs() {
+        return new Argument[0];
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.constant(retVal.getType(), retVal.getValue());
+    }
+
+    @Override
+    protected String getName() {
+        return "constant";
+    }
+
+    @Override
+    protected String getDescription() {
+        return "retVal=" + retVal;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHConvertTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.TestTypes;
+
+public class MHConvertTF extends MHCastTF {
+
+    protected MHConvertTF(MHCall target, Class<?> newRetType, Class<?>[] newArgTypes) {
+        super(target, newRetType, newArgTypes);
+    }
+
+    @Override
+    protected Argument convert(Argument argument, Class<?> newClass, boolean isRetType) {
+        return TestTypes.convertArgument(argument, newClass, isRetType);
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH(MethodHandle targetMH) throws NoSuchMethodException, IllegalAccessException {
+        throw new RuntimeException("Internal error: Functionality disabled in JDK7");
+        /*
+        return MethodHandles.convertArguments(targetMH, this.newMT);
+        */
+    }
+
+    @Override
+    protected String getName() {
+        return "convertArguments";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHDropTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.WrongMethodTypeException;
+import java.util.Arrays;
+
+import nsk.share.test.TestUtils;
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.Arguments;
+
+public class MHDropTF extends MHInsertOrDropTF {
+
+    public MHDropTF(MHCall target, int pos, Argument[] values) {
+        super(target, pos, values);
+    }
+
+    @Override
+    protected void check() {
+        int argCount = target.getArgs().length;
+        if ( pos > argCount )
+            throw new WrongMethodTypeException("position " + pos + " is invalid. Target has only " + argCount + " arguments");
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs(Argument[] targetArgs) {
+        return TestUtils.concatArrays(
+                Arrays.copyOfRange(targetArgs, 0, this.pos),
+                this.values,
+                Arrays.copyOfRange(targetArgs, this.pos, targetArgs.length));
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH(MethodHandle targetMH) {
+        return MethodHandles.dropArguments(targetMH, this.pos, Arguments.typesArray(this.values));
+    }
+
+    @Override
+    protected String getName() {
+        return "dropArguments";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHDropTF2.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.util.Arrays;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.Arguments;
+
+/**
+ * This is fully equivalent version of MHDropTF that just covers another version of dropArguments()
+ */
+
+public class MHDropTF2 extends MHDropTF {
+
+    public MHDropTF2(MHCall target, int pos, Argument[] values) {
+        super(target, pos, values);
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH(MethodHandle targetMH) {
+        // We increase coverage by using different methods
+        return MethodHandles.dropArguments(targetMH, this.pos, Arrays.asList(Arguments.typesArray(this.values)));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHEnvelopeArgTFPair.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.Arguments;
+
+public abstract class MHEnvelopeArgTFPair extends MHTFPair {
+
+    private final String _tag;
+    private final int _argNum;
+    protected final Argument _envelopeArg;
+    protected final Argument _envelopeLocatorArg;
+    private final Argument _componentArg;
+
+    public MHEnvelopeArgTFPair(MHCall outboundTarget, String tag, int argNum, Argument envelope, Argument envelopeLocator) {
+        super(outboundTarget);
+
+        _tag = tag;
+        _argNum = argNum;
+
+        envelopeLocator.setPreserved(true);
+        envelopeLocator.setTag(tag + "_Locator");
+        _envelopeLocatorArg = envelopeLocator;
+
+        Argument arg = outboundTarget.getArgs()[argNum];
+        _componentArg = arg;
+
+        envelope.setTag(tag + "_Envelope");
+        envelope.setPreserved(true);
+        _envelopeArg = envelope;
+    }
+
+    @Override
+    public MHTF getOutboundTF() {
+        try {
+            MHMacroTF mTF = new MHMacroTF("envelope arg outbound");
+            mTF.addOutboundCall(outboundTarget);
+
+            Argument[] outArgs = outboundTarget.getArgs();
+
+            mTF.addTransformation(new MHPermuteTF(
+                    mTF.addTransformation(new MHFoldTF(
+                            mTF.addTransformation(new MHPermuteTF(outboundTarget,
+                                    MHPermuteTF.moveArgsInPermuteArray(MHPermuteTF.getIdentityPermuteArray(outArgs.length), 0, 1, _argNum)
+                            )),
+                            mTF.addTransformation(computeGetTF(_envelopeArg, _envelopeLocatorArg))
+                    )),
+                    MHPermuteTF.moveArgsInPermuteArray(MHPermuteTF.getIdentityPermuteArray(outArgs.length + 1), _argNum, 2, 0)
+            ));
+
+            return mTF;
+        } catch ( Exception e ) {
+            throw (IllegalArgumentException) (new IllegalArgumentException("Exception when creating TF")).initCause(e);
+        }
+    }
+
+    protected abstract MHTF computeGetTF(Argument envelopeArg2, Argument envelopeLocatorArg2);
+
+    @Override
+    public MHTF getInboundTF(MHCall target) {
+        try {
+            Argument[] outArgs = target.getArgs();
+
+            int[] arrayArgIdxs = Arguments.findTag(outArgs, _tag + "_Envelope");
+            if ( arrayArgIdxs.length != 1 )
+                throw new IllegalArgumentException("There should be only one argument tagged [" + _tag + "_Envelope], but there are " + arrayArgIdxs);
+            int arrayArgIdx = arrayArgIdxs[0];
+
+            int[] idxArgIdxs = Arguments.findTag(outArgs, _tag + "_Locator");
+            if ( idxArgIdxs.length != 1 )
+                throw new IllegalArgumentException("There should be only one argument tagged [" + _tag + "_Locator], but there are " + idxArgIdxs);
+            int idxArgIdx = idxArgIdxs[0];
+
+            MHMacroTF mTF = new MHMacroTF("envelope arg inbound");
+            mTF.addOutboundCall(target);
+
+            int[] innerPermuteArray = MHPermuteTF.getIdentityPermuteArray(outArgs.length);
+
+            if ( arrayArgIdx < idxArgIdx )
+                innerPermuteArray = MHPermuteTF.moveArgsInPermuteArray(MHPermuteTF.moveArgsInPermuteArray(innerPermuteArray, 0, 1, arrayArgIdx), 0, 1, idxArgIdx);
+            else
+                innerPermuteArray = MHPermuteTF.moveArgsInPermuteArray(MHPermuteTF.moveArgsInPermuteArray(innerPermuteArray, 0, 1, idxArgIdx), 0, 1, arrayArgIdx);
+
+            mTF.addTransformation(new MHPermuteTF(
+                    mTF.addTransformation(new MHInsertTF(
+                            mTF.addTransformation(new MHFoldTF(
+                                    mTF.addTransformation(new MHPermuteTF(target, innerPermuteArray)),
+                                    mTF.addTransformation(computeSetTF(_envelopeArg, _envelopeLocatorArg, _componentArg))
+                            )),
+                            0, new Argument[] { _envelopeArg, _envelopeLocatorArg }, true
+                    )),
+                    MHPermuteTF.moveArgsInPermuteArray(MHPermuteTF.getIdentityPermuteArray(outArgs.length), arrayArgIdx, 1, 0)
+            ));
+
+            return mTF;
+        } catch ( Exception e ) {
+            throw (IllegalArgumentException) (new IllegalArgumentException("Exception when creating TF")).initCause(e);
+        }
+    }
+
+    protected abstract MHTF computeSetTF(Argument envelopeArg2, Argument envelopeLocatorArg2, Argument componentArg2);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHExplicitCastTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.TestTypes;
+
+public class MHExplicitCastTF extends MHCastTF {
+
+    protected MHExplicitCastTF(MHCall target, Class<?> newRetType, Class<?>[] newArgTypes) {
+        super(target, newRetType, newArgTypes);
+    }
+
+    @Override
+    protected Argument convert(Argument argument, Class<?> newClass, boolean isRetType) {
+        return TestTypes.explicitCastArgument(argument, newClass, isRetType);
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH(MethodHandle targetMH) {
+        return MethodHandles.explicitCastArguments(targetMH, this.newMT);
+    }
+
+    @Override
+    protected String getName() {
+        return "explicitCastArguments";
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFilterRetValTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.WrongMethodTypeException;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHUtils;
+
+public class MHFilterRetValTF extends MHNaryTF {
+
+    protected final MHCall target, filter;
+
+    public MHFilterRetValTF(MHCall target, MHCall filter) {
+        this.target = target;
+        this.filter = filter;
+    }
+
+    @Override
+    protected void check() throws IllegalArgumentException {
+        if ( this.filter.getArgs().length != 1 )
+            throw new WrongMethodTypeException("Filter should have exactly one argument, but has: " + this.filter.getArgs());
+
+        MHUtils.assertAssignableType("target return type to filter parameter",
+                this.filter.getArgs()[0].getType(), this.target.getRetVal().getType());
+    }
+
+    @Override
+    protected Argument computeRetVal() {
+        return this.filter.getRetVal();
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs() {
+        return this.target.getArgs();
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() {
+        return MethodHandles.filterReturnValue(target.getTargetMH(), filter.getTargetMH());
+    }
+
+    @Override
+    public MHCall[] getOutboundCalls() {
+        return new MHCall[] { target, filter };
+    }
+
+    @Override
+    protected String getName() {
+        return "filterReturnValue";
+    }
+
+    @Override
+    protected String getDescription() {
+        return "filter=" + this.filter;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFilterTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.WrongMethodTypeException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import nsk.share.test.TestUtils;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHUtils;
+
+public class MHFilterTF extends MHNaryTF {
+
+    protected final MHCall _target, _filters[];
+    protected final int _pos;
+
+    public MHFilterTF(MHCall target, int pos, MHCall[] filters) {
+        _target = target;
+        _pos = pos;
+        _filters = filters;
+    }
+
+    @Override
+    protected void check() throws IllegalArgumentException {
+        Argument[] targetArgs = _target.getArgs();
+        for ( int i = 0; i < _filters.length; i++ ) {
+            MHCall f = _filters[i];
+            if ( f == null )
+                continue;
+
+            int p = i + _pos;
+
+            if ( f.getArgs().length != 1 )
+                throw new WrongMethodTypeException("Filter " + i + " should have exactly one argument, but has: " + f.getArgs());
+
+            MHUtils.assertAssignableType("filter return type to target parameter " + i,
+                    targetArgs[p].getType(),
+                    f.getRetVal().getType());
+        }
+    }
+
+    @Override
+    protected Argument computeRetVal() {
+        return _target.getRetVal();
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs() {
+        Argument[] result = _target.getArgs().clone();
+
+        for ( int i = 0; i < _filters.length; i++ ) {
+            MHCall f = _filters[i];
+            if ( f != null )
+                result[i + _pos] = f.getArgs()[0];
+        }
+
+        return result;
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() {
+        MethodHandle[] filterMHs = new MethodHandle[_filters.length];
+        for ( int i = 0; i < _filters.length; i++ ) {
+            MHCall f = _filters[i];
+            if ( f != null )
+                filterMHs[i] = f.getTargetMH();
+        }
+        return MethodHandles.filterArguments(_target.getTargetMH(), _pos, filterMHs);
+    }
+
+    @Override
+    public MHCall[] getOutboundCalls() {
+        Set<MHCall> calls = new HashSet<MHCall>();
+        calls.add(_target);
+        calls.addAll(Arrays.asList(_filters));
+        calls.remove(null);
+        return calls.toArray(new MHCall[0]);
+    }
+
+    @Override
+    protected String getName() {
+        return "filterArguments";
+    }
+
+    @Override
+    protected String getDescription() {
+        return "pos=" + _pos + "; filters=" + Arrays.toString(_filters);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHFoldTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.util.Arrays;
+
+import nsk.share.test.TestUtils;
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHUtils;
+
+public class MHFoldTF extends MHNaryTF {
+
+    protected final MHCall _combiner, _target;
+
+    public MHFoldTF(MHCall target, MHCall combiner) {
+        _target = target;
+        _combiner = combiner;
+    }
+
+    @Override
+    protected void check() throws IllegalArgumentException {
+        Argument[] targetArgs = _target.getArgs();
+        Argument[] combinerArgs = _combiner.getArgs();
+
+        MHUtils.assertAssignableType(
+                "combiner result assignable to parameter 0",
+                targetArgs[0].getType(),
+                _combiner.getRetVal().getType());
+
+        for ( int i = 0; i < combinerArgs.length; i++ ) {
+            MHUtils.assertAssignableType(
+                    "combiner parameter " + i + " assignable to target parameter " + (i + 1),
+                    combinerArgs[i].getType(),
+                    targetArgs[i + 1].getType());
+        }
+    }
+
+    @Override
+    protected Argument computeRetVal() {
+        return _target.getRetVal();
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs() {
+        return TestUtils.cdr(_target.getArgs());
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() {
+        return MethodHandles.foldArguments(_target.getTargetMH(), _combiner.getTargetMH());
+    }
+
+    @Override
+    public MHCall[] getOutboundCalls() {
+        return new MHCall[] { _target, _combiner };
+    }
+
+    @Override
+    protected String getName() {
+        return "foldArguments";
+    }
+
+    @Override
+    protected String getDescription() {
+        return "combiner=" + _combiner;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHIdentityTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+
+import vm.mlvm.meth.share.Argument;
+
+public class MHIdentityTF extends MHNullaryTF {
+
+    private final Argument _arg;
+
+    public MHIdentityTF(Argument arg) {
+        _arg = arg;
+    }
+
+    @Override
+    protected void check() throws IllegalArgumentException {
+    }
+
+    @Override
+    protected Argument computeRetVal() {
+        return _arg;
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs() {
+        return new Argument[] { _arg };
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() {
+        return MethodHandles.identity(_arg.getType());
+    }
+
+    @Override
+    protected String getName() {
+        return "identity";
+    }
+
+    @Override
+    protected String getDescription() {
+        return "arg=" + _arg;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHInsertOrDropTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import vm.mlvm.meth.share.Argument;
+
+public abstract class MHInsertOrDropTF extends MHBasicUnaryTF {
+
+    protected final int pos;
+    protected final Argument[] values;
+
+    protected MHInsertOrDropTF(MHCall target, int pos, Argument[] values) {
+        super(target);
+        this.pos  = pos;
+        this.values = values;
+    }
+
+    @Override
+    protected String getDescription() {
+        StringBuilder sb = new StringBuilder();
+        int p = this.pos;
+        for ( Argument a : this.values ) {
+            sb.append("[").append(p).append("] ").append(a).append(", ");
+            ++p;
+        }
+        if ( sb.length() > 2 )
+            sb.setLength(sb.length() - 2);
+        return sb.toString();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHInsertTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.WrongMethodTypeException;
+import java.util.Arrays;
+
+import nsk.share.test.TestUtils;
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.Arguments;
+import vm.mlvm.meth.share.MHUtils;
+
+public class MHInsertTF extends MHInsertOrDropTF {
+
+    protected final boolean _canDropProtected;
+
+    public MHInsertTF(MHCall target, int pos, Argument[] values, boolean canDropProtected) {
+        super(target, pos, values);
+        _canDropProtected = canDropProtected;
+    }
+
+    @Override
+    protected void check(Argument[] targetArgs) throws IllegalArgumentException {
+        super.check(targetArgs);
+
+        for (int i = this.pos; i < Math.min(targetArgs.length, this.pos + this.values.length); i++) {
+            if ( ! _canDropProtected && targetArgs[i].isPreserved() ) {
+                throw new WrongMethodTypeException("Dropping a protected argument #" + i
+                                                 + ": " + targetArgs[i]);
+
+            }
+
+            MHUtils.assertAssignableType("argument " + i, targetArgs[i].getType(), this.values[i - this.pos].getType());
+        }
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs(Argument[] targetArgs) {
+        return TestUtils.concatArrays(
+                Arrays.copyOfRange(targetArgs, 0, this.pos),
+                Arrays.copyOfRange(targetArgs, this.pos + this.values.length, targetArgs.length));
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH(MethodHandle targetMH) {
+        return MethodHandles.insertArguments(targetMH, this.pos, Arguments.valuesArray(this.values));
+    }
+
+    @Override
+    protected String getName() {
+        return "insertArguments";
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHMacroTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.io.*;
+import java.util.*;
+
+import vm.mlvm.share.Env;
+
+import nsk.share.test.TestUtils;
+
+
+public class MHMacroTF extends MHTF {
+
+    private final String name;
+    private final Collection<MHCall> calls = new HashSet<>();
+    private final Collection<MHCall> outboundCalls = new LinkedHashSet<>();
+    private MHCall inboundCall = null;
+    private final Collection<MHTF> tfs = new LinkedHashSet<>();
+
+    public MHMacroTF(String name) {
+        this.name = name;
+    }
+
+    private void addNewInboundCall(MHCall call) {
+        TestUtils.assertNotInCollection(this.calls, call);
+
+        this.inboundCall = call;
+        this.calls.add(call);
+    }
+
+    public void addOutboundCall(MHCall call) {
+        TestUtils.assertNotInCollection(this.calls, call);
+
+        this.calls.add(call);
+        this.outboundCalls.add(call);
+    }
+
+    public MHCall addTransformation(MHTF tf) throws IllegalArgumentException,
+            NoSuchMethodException, IllegalAccessException {
+        TestUtils.assertNotInCollection(this.tfs, tf);
+        for (MHCall c : tf.getOutboundCalls()) {
+            TestUtils.assertInCollection(this.calls, c);
+        }
+
+        Env.traceDebug("MHMacroTF: adding %s", tf);
+
+        this.tfs.add(tf);
+        MHCall inboundCall = tf.computeInboundCall();
+        addNewInboundCall(inboundCall);
+
+        Env.traceDebug("MHMacroTF: current inbound call: %s", inboundCall);
+
+        return inboundCall;
+    }
+
+    @Override
+    public MHCall computeInboundCall() {
+        return inboundCall;
+    }
+
+    @Override
+    public MHCall[] getOutboundCalls() {
+        return this.outboundCalls.toArray(new MHCall[0]);
+    }
+
+    @Override
+    public MHTF[] getSubTFs() {
+        return this.tfs.toArray(new MHTF[0]);
+    }
+
+    @Override
+    protected String getName() {
+        return name + " graph";
+    }
+
+    @Override
+    protected String getDescription() {
+        StringBuilder result = new StringBuilder("\n");
+        Deque<PrettyPrintElement> printElements = new ArrayDeque<>();
+        printElements.add(new PrettyPrintElement("", "  ", inboundCall, true));
+        PrettyPrintElement current;
+        while (!printElements.isEmpty()) {
+            current = printElements.pop();
+            appendElement(result, printElements, current.topCallPrefix,
+                    current.subCallPrefix, current.topCall,
+                    current.isRecursive);
+        }
+        String filename = getName() + "-"
+                + Long.toString(System.currentTimeMillis(), Character.MAX_RADIX)
+                + ".txt";
+        try (Writer writer = new FileWriter(filename)) {
+            writer.write(result.toString());
+        } catch (IOException e) {
+            return result.toString();
+        }
+        return "see " + filename;
+    }
+
+    private void appendElement(StringBuilder result,
+            Deque<PrettyPrintElement> deque, String topCallPrefix,
+            String subCallPrefix, MHCall topCall, boolean isRecursive) {
+        MHCall[] outCalls = topCall.getTarget().getOutboundCalls();
+        boolean printSubTree = (isRecursive && outCalls.length > 0);
+        result.append(topCall.prettyPrint(topCallPrefix + "->",
+                subCallPrefix + (printSubTree ? "|" : " ") + " ") + "\n");
+        if (printSubTree) {
+            for (int n = outCalls.length - 1, i = n; i >= 0; --i) {
+                MHCall outCall = outCalls[i];
+                boolean isLastSubtree = (i == n);
+                String curTopCallPrefix = subCallPrefix
+                        + (isLastSubtree ? "\\" : "|")
+                        + "--";
+                String curSubCallPrefix = subCallPrefix
+                        + (isLastSubtree ? " " : "|")
+                        + "  ";
+                deque.addFirst(new PrettyPrintElement(curTopCallPrefix,
+                        curSubCallPrefix, outCall,
+                        !outboundCalls.contains(outCall)));
+            }
+        }
+    }
+
+
+    private static class PrettyPrintElement {
+        final String topCallPrefix;
+        final String subCallPrefix;
+        final MHCall topCall;
+        final boolean isRecursive;
+
+        private PrettyPrintElement(String topCallPrefix,
+                String subCallPrefix, MHCall topCall, boolean isRecursive) {
+            this.topCallPrefix = topCallPrefix;
+            this.subCallPrefix = subCallPrefix;
+            this.topCall = topCall;
+            this.isRecursive = isRecursive;
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHNaryTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+
+import vm.mlvm.meth.share.Argument;
+
+public class MHNaryTF extends MHPrimitiveTF {
+
+    @Override
+    protected void check() throws IllegalArgumentException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    protected Argument computeRetVal() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() throws NoSuchMethodException, IllegalAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public MHCall[] getOutboundCalls() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected String getName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected String getDescription() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHNullaryTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+public abstract class MHNullaryTF extends MHPrimitiveTF {
+
+    @Override
+    public MHCall[] getOutboundCalls() {
+        return new MHCall[0];
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHOutboundCallTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.util.Arrays;
+
+import vm.mlvm.meth.share.Argument;
+
+public class MHOutboundCallTF extends MHNullaryTF {
+
+    private final Argument retVal;
+    private final MethodHandle mh;
+    private final Argument[] args;
+
+    public MHOutboundCallTF(Argument retVal, MethodHandle mh, Argument[] args) {
+        this.retVal = retVal;
+        this.mh = mh;
+        this.args = args;
+    }
+
+    @Override
+    protected void check() throws IllegalArgumentException {
+    }
+
+    @Override
+    protected Argument computeRetVal() {
+        return this.retVal;
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs() {
+        return this.args;
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() {
+        return this.mh;
+    }
+
+    @Override
+    protected String getName() {
+        return "outboundCall";
+    }
+
+    @Override
+    protected String getDescription() {
+        return "retVal=" + this.retVal + "; mh=" + this.mh + "; args=" + Arrays.toString(this.args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHOutboundVirtualCallTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+
+import vm.mlvm.meth.share.Argument;
+
+public class MHOutboundVirtualCallTF extends MHOutboundCallTF {
+
+    private final Object boundObj;
+
+    public MHOutboundVirtualCallTF(Argument retVal, Object boundObj, MethodHandle mh, Argument[] args) {
+        super(retVal, mh, args);
+        this.boundObj = boundObj;
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH() {
+        return super.computeInboundMH().bindTo(boundObj);
+    }
+
+    @Override
+    protected String getName() {
+        return "outboundVirtualCall";
+    }
+
+    @Override
+    protected String getDescription() {
+        return super.getDescription() + "; boundObj=" + boundObj;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHPermuteTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.invoke.WrongMethodTypeException;
+import java.util.Arrays;
+
+import nsk.share.test.LazyIntArrayToString;
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHUtils;
+import vm.mlvm.share.Env;
+
+public class MHPermuteTF extends MHBasicUnaryTF {
+
+    private final int[] _reorderArray;
+    private final MethodType _sourceMT;
+
+    public MHPermuteTF(MHCall target, MethodType sourceMT, int[] reorderArray) {
+        super(target);
+        _reorderArray = reorderArray;
+        _sourceMT = sourceMT;
+    }
+
+    public MHPermuteTF(MHCall target, int[] reorderArray) {
+        this(target, getPermutedMT(target.getTargetMH().type(), reorderArray), reorderArray);
+    }
+
+    @Override
+    protected void check(Argument[] targetArgs) throws IllegalArgumentException {
+        super.check(targetArgs);
+
+        if ( _sourceMT.parameterCount() < _reorderArray.length ) {
+            throw new WrongMethodTypeException("reorderArray requires at least "
+                                             + _reorderArray.length + " target arguments, but only "
+                                             + _sourceMT.parameterCount() + " are given");
+        }
+
+        for ( int i = 0; i < _reorderArray.length; i++ ) {
+            MHUtils.assertAssignableType("reorderArray element " + i,
+                    targetArgs[i].getType(),
+                    _sourceMT.parameterType(_reorderArray[i]));
+        }
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH(MethodHandle targetMH) {
+        MethodHandle r = MethodHandles.permuteArguments(targetMH, _sourceMT, _reorderArray);
+        Env.traceDebug("permute: inType=%s; targetType=%s; reorder=%s",
+                       r.type(), targetMH.type(), new LazyIntArrayToString(_reorderArray));
+        return r;
+    }
+
+    @Override
+    protected Argument[] computeInboundArgs(Argument[] targetArgs) {
+        Argument[] resultArgs = new Argument[_sourceMT.parameterCount()];
+
+        for ( int i = 0; i < targetArgs.length; i++ ) {
+            resultArgs[_reorderArray[i]] = targetArgs[i];
+        }
+
+        for ( int i = 0; i < resultArgs.length; i++ ) {
+            if ( resultArgs[i] == null ) {
+                resultArgs[i] = new Argument(_sourceMT.parameterType(i), null);
+            }
+        }
+
+        return resultArgs;
+    }
+
+    @Override
+    protected String getName() {
+        return "permuteArguments";
+    }
+
+    @Override
+    protected String getDescription() {
+        return "sourceMT=" + _sourceMT + "; reorder=" + Arrays.toString(_reorderArray);
+    }
+
+    public static MethodType getPermutedMT(MethodType targetMT, int[] reorderArray) {
+        int srcParamCount = 0;
+        for ( int t = 0; t < reorderArray.length; t++ )
+            srcParamCount = Math.max(srcParamCount, reorderArray[t] + 1);
+
+        Class<?>[] paramTypes = new Class<?>[srcParamCount];
+
+        for ( int t = 0; t < reorderArray.length; t++ )
+            paramTypes[reorderArray[t]] = targetMT.parameterType(t);
+
+        for ( int s = 0; s < paramTypes.length; s++ )
+            if ( paramTypes[s] == null )
+                    throw new IllegalArgumentException("Type of parameter #" + s + " is not defined");
+
+        return MethodType.methodType(targetMT.returnType(), paramTypes);
+    }
+
+    public static int[] getIdentityPermuteArray(int argCount) {
+        int[] result = new int[argCount];
+        for ( int i = 0; i < argCount; i++ )
+            result[i] = i;
+        return result;
+    }
+
+    public static int[] moveArgsInPermuteArray(int[] array, int oldPos, int count, int newPos) {
+        if ( newPos == oldPos )
+            return array;
+
+        int[] result = new int[array.length];
+
+        if ( newPos < oldPos ) {
+            System.arraycopy(array, 0, result, 0, newPos);
+            System.arraycopy(array, newPos, result, newPos + count, oldPos - newPos);
+            System.arraycopy(array, oldPos + count, result, oldPos + count, array.length - oldPos - count);
+        } else {
+            System.arraycopy(array, 0, result, 0, oldPos);
+            System.arraycopy(array, oldPos + count, result, oldPos, newPos - oldPos - count);
+            System.arraycopy(array, newPos + count, result, newPos + count, array.length - newPos - count);
+        }
+        System.arraycopy(array, oldPos, result, newPos, count);
+
+        return result;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHPrimitiveTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+
+import vm.mlvm.meth.share.Argument;
+
+public abstract class MHPrimitiveTF extends MHTF {
+
+    @Override
+    public MHCall computeInboundCall() throws IllegalArgumentException, NoSuchMethodException, IllegalAccessException {
+        check();
+        MHCall result = new MHCall(
+                computeRetVal(),
+                this,
+                computeInboundMH(),
+                computeInboundArgs());
+        result.check();
+        return result;
+    }
+
+    protected abstract void check() throws IllegalArgumentException;
+    protected abstract Argument computeRetVal();
+    protected abstract Argument[] computeInboundArgs();
+    protected abstract MethodHandle computeInboundMH() throws NoSuchMethodException, IllegalAccessException;
+
+    @Override
+    public MHTF[] getSubTFs() {
+        return new MHTF[0];
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHSamTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+public class MHSamTF extends MHBasicUnaryTF {
+
+    public static interface SAM {
+        public Object run(Object[] o) throws Throwable;
+    }
+
+    public static class SAMCaller {
+        private final SAM sam;
+
+        public SAMCaller(SAM sam) {
+            this.sam = sam;
+        }
+
+        public Object callSAM(Object[] o) throws Throwable {
+            return sam.run(o);
+        }
+    }
+
+    public MHSamTF(MHCall target) {
+        super(target);
+    }
+
+    @Override
+    protected MethodHandle computeInboundMH(MethodHandle targetMH) throws NoSuchMethodException, IllegalAccessException {
+        throw new RuntimeException("Internal error: Functionality is disabled in JDK7");
+        /*
+        MethodHandle mh = targetMH.asSpreader(Object[].class, targetMH.type().parameterCount());
+
+        SAM sam = MethodHandles.asInstance(mh, SAM.class);
+
+        // The checks below aimed to increase coverage
+        MethodHandle mhCopy = MethodHandles.wrapperInstanceTarget(sam);
+        if ( ! mh.equals(mhCopy) ) {
+            throw new IllegalArgumentException("wrapperInstanceTarget returned a different MH: [" + mhCopy + "]; original was [" + mh + "]");
+        }
+
+        Class<?> samClass = MethodHandles.wrapperInstanceType(sam);
+        if ( ! SAM.class.equals(samClass) ) {
+            throw new IllegalArgumentException("wrapperInstanceType returned a different class: [" + samClass + "]; original was [" + SAM.class + "]");
+        }
+
+        if ( ! MethodHandles.isWrapperInstance(sam) ) {
+            throw new IllegalArgumentException("isWrapperInstance returned false for SAM object: [" + sam + "]");
+        }
+
+        return MethodHandles.convertArguments(
+                   MethodHandles.lookup().findVirtual(SAMCaller.class, "callSAM", MethodType.methodType(Object.class, Object[].class))
+                       .bindTo(new SAMCaller(sam))
+                       .asCollector(Object[].class, targetMH.type().parameterCount()),
+                   targetMH.type());
+
+        */
+    }
+
+    @Override
+    protected String getName() {
+        return "SAM";
+    }
+
+    @Override
+    protected String getDescription() {
+        return "";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+public abstract class MHTF {
+
+    public abstract MHCall[] getOutboundCalls();
+    public abstract MHCall computeInboundCall() throws NoSuchMethodException, IllegalArgumentException, IllegalAccessException;
+
+    public abstract MHTF[] getSubTFs();
+
+    @Override
+    public final String toString() {
+        return "MH " + getName() + " TF: " + getDescription();
+    }
+
+    protected abstract String getName();
+    protected abstract String getDescription();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHTFPair.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+/**
+ * Pairwise transformation container
+ */
+public abstract class MHTFPair {
+
+    protected final MHCall outboundTarget;
+
+    protected MHTFPair(MHCall outboundTarget) {
+        this.outboundTarget = outboundTarget;
+    }
+
+    public abstract MHTF getOutboundTF();
+    public abstract MHTF getInboundTF(MHCall inboundTarget);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHThrowCatchTFPair.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.Arguments;
+import vm.mlvm.meth.share.SimpleOpMethodHandles;
+import vm.mlvm.share.Env;
+
+public class MHThrowCatchTFPair extends MHTFPair {
+
+    private final String id;
+    private final Argument testArg;
+    private final Object testValue2;
+    private final boolean testEq;
+    private final Throwable _exception;
+
+    private class ThrowTF extends MHDropTF {
+
+        public ThrowTF(MHCall outboundCall) {
+            super(outboundCall, 0, new Argument[] { testArg });
+        }
+
+        @Override
+        protected MethodHandle computeInboundMH(MethodHandle targetMH) {
+            try {
+                Argument testArg = MHThrowCatchTFPair.this.testArg;
+
+                MethodType targetType = targetMH.type().insertParameterTypes(0, testArg.getType());
+
+                MHMacroTF mTF = new MHMacroTF("throwCatch throw part");
+                mTF.addOutboundCall(getTargetCall());
+/*
+                MHCall testCall =
+                    mTF.addTransformation(new MHInsertTF(
+                           mTF.addTransformation(new MHExplicitCastTF(
+                               mTF.addTransformation(new MHEqualityTestTF(testArg)),
+                               boolean.class, new Class<?>[] { testArg.getType(), testArg.getType() })),
+                    0, new Argument[] { testArg }, false));
+*/
+                MethodHandle testMH = MethodHandles.insertArguments(
+                        MethodHandles.explicitCastArguments(
+                                SimpleOpMethodHandles.eqMH(),
+                                MethodType.methodType(boolean.class, testArg.getType(), testArg.getType())),
+                        0, testArg.getValue());
+
+                MethodHandle normalBranchMH = MethodHandles.dropArguments(targetMH, 0, testArg.getType());
+
+                MethodHandle throwingBranchMH =
+                    MethodHandles.dropArguments(
+                            MethodHandles.insertArguments(
+                                    MethodHandles.throwException(targetType.returnType(), _exception.getClass()),
+                            0, _exception),
+                    0, targetType.parameterArray());
+
+                MethodHandle thenMH, elseMH;
+                if ( MHThrowCatchTFPair.this.testEq ) {
+                    thenMH = throwingBranchMH;
+                    elseMH = normalBranchMH;
+                } else {
+                    testMH = MethodHandles.filterReturnValue(testMH, SimpleOpMethodHandles.notMH());
+                    elseMH = throwingBranchMH;
+                    thenMH = normalBranchMH;
+                }
+
+                Env.traceDebug("ThrowCatchTFPair: targetMH=%s; testMH=%s; thenMH=%s; elseMH=%s",
+                               targetMH.type(), testMH.type(), thenMH.type(), elseMH.type());
+
+                return MethodHandles.guardWithTest(testMH, thenMH, elseMH);
+            } catch ( Throwable t ) {
+                throw (IllegalArgumentException) (new IllegalArgumentException("Can't create throw/catch TF")).initCause(t);
+            }
+        }
+    }
+
+    private class CatchTF extends MHInsertTF {
+
+        public CatchTF(MHCall target, int argIdx) {
+            super(target, argIdx, new Argument[] { testArg }, true);
+        }
+
+        @Override
+        protected MethodHandle computeInboundMH(MethodHandle targetMH) {
+            try {
+                MethodHandle catchTargetMH = MethodHandles.insertArguments(targetMH, this.pos, MHThrowCatchTFPair.this.testArg.getValue());
+                MethodHandle catchHandlerMH = MethodHandles.dropArguments(
+                        MethodHandles.insertArguments(targetMH, this.pos, MHThrowCatchTFPair.this.testValue2),
+                        0, _exception.getClass());
+
+                return MethodHandles.catchException(catchTargetMH, _exception.getClass(), catchHandlerMH);
+            } catch ( Throwable t ) {
+                IllegalArgumentException e = new IllegalArgumentException("Can't create a transformation");
+                e.initCause(t);
+                throw e;
+            }
+        }
+    }
+    public MHThrowCatchTFPair(MHCall outboundTarget, Argument testArg, Object testValue2, boolean testEq, Throwable exc) {
+        super(outboundTarget);
+        this.id = "ThrowCatch_" + hashCode();
+
+        this.testArg = testArg.clone();
+        this.testArg.setPreserved(true);
+        this.testArg.setTag(this.id);
+
+        this.testValue2 = testValue2;
+        this.testEq = testEq;
+        _exception = exc;
+    }
+
+    @Override
+    public MHTF getOutboundTF() {
+        return new ThrowTF(this.outboundTarget);
+    }
+
+    @Override
+    public MHTF getInboundTF(MHCall inboundTarget) {
+        int[] tagged = Arguments.findTag(inboundTarget.getArgs(), this.id);
+
+        if ( tagged.length != 1 ) {
+            throw new IllegalArgumentException("Can't find exactly one argument tagged " + this.id
+                              + " from inner transformation (found indexes: " + tagged + ")");
+        }
+
+        return new CatchTF(inboundTarget, tagged[0]);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHUnaryTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+public abstract class MHUnaryTF extends MHPrimitiveTF {
+
+    protected MHCall target;
+
+    protected MHUnaryTF(final MHCall target) {
+        this.target = target;
+    }
+
+    @Override
+    public MHCall[] getOutboundCalls() {
+        return new MHCall[] { this.target };
+    }
+
+    public MHCall getTargetCall() {
+        return this.target;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/share/transform/v2/MHVarargsCollectSpreadTF.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.meth.share.transform.v2;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodType;
+
+import nsk.share.test.TestUtils;
+
+public class MHVarargsCollectSpreadTF extends MHCollectSpreadBaseTF {
+
+    public MHVarargsCollectSpreadTF(MHCall target) {
+        super(target);
+    }
+
+    @Override
+    protected MethodHandle computeCollectorMH(MethodHandle spreaderMH, MethodType targetType) {
+        MethodHandle ret = spreaderMH.asVarargsCollector(Object[].class).asType(targetType);
+        // Increase coverage
+        TestUtils.assertTrue(ret.isVarargsCollector(), "isVarargsCollection() should return true" );
+        return ret;
+    }
+
+    @Override
+    protected MethodHandle computeSpreaderMH(MethodHandle targetMH) {
+        return targetMH.asSpreader(Object[].class, targetMH.type().parameterCount());
+    }
+
+    @Override
+    protected String getName() {
+        return "VarargsCollectSpread";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/deoptimize/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/stress/compiler/deoptimize.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine]
+ * VM Testbase comments: 8079642 8079714
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     The test creates and calls MH sequences (see vm/mlvm/mh/func/sequences test) causing compilation
+ *     (by calling sequence 10000 times) and deoptimization (by using uncommon traps).
+ *     See vm.mlvm.meth.stress.java.sequences.Test for details on MH sequences.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.stress.compiler.deoptimize.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      -XX:ReservedCodeCacheSize=100m
+ *      vm.mlvm.meth.stress.compiler.deoptimize.Test
+ *      -threadsPerCpu 4
+ *      -threadsExtra 2
+ */
+
+package vm.mlvm.meth.stress.compiler.deoptimize;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHTransformationGen;
+import vm.mlvm.meth.share.RandomArgumentsGen;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.MultiThreadedTest;
+
+// TODO: check deopt using vm.mlvm.share.comp framework
+public class Test extends MultiThreadedTest {
+
+    static class A {
+        Object m() {
+            return new Integer(0);
+        }
+    }
+
+    static class B extends A {
+        @Override
+        Object m() {
+            return new Integer(1);
+        }
+    }
+
+    static class TestData {
+        final A _a;
+        final int _expectedResult;
+
+        TestData(A a) {
+            _a = a;
+            _expectedResult = (Integer) a.m();
+        }
+
+        Object m() {
+            return _a.m();
+        }
+    }
+
+    volatile TestData _data = new TestData(new A());
+
+    volatile boolean _testDone = false;
+
+    final MethodHandle _mh;
+    final Argument[] _finalArgs;
+
+    public Test() throws Throwable {
+        _mh = MethodHandles.lookup().findVirtual(TestData.class, "m", MethodType.methodType(Object.class));
+        _finalArgs = RandomArgumentsGen.createRandomArgs(true, _mh.type());
+    }
+
+    @Override
+    protected void initializeTest() throws Throwable {
+        super.initializeTest();
+        if (calcThreadNum() < 2) {
+            throw new IllegalArgumentException("Number of threads should be 2 or more");
+        }
+    }
+
+    private void sleepAndDeoptimize() throws Throwable {
+        try {
+            Thread.sleep(3000);
+            // Force deoptimization in uncommon trap logic
+            Env.traceNormal("Deoptimizing");
+            _data = new TestData((A) Test.class.getClassLoader().loadClass(Test.class.getName() + "$B").newInstance());
+            Thread.sleep(3000);
+        } finally {
+            this._testDone = true;
+        }
+    }
+
+    @Override
+    protected boolean runThread(int threadNum) throws Throwable {
+        if ( threadNum == 0 ) {
+            sleepAndDeoptimize();
+            return true;
+        }
+
+        while ( ! Test.this._testDone) {
+            TestData dataSnapshot = _data;
+            Integer expectedResult = (Integer) dataSnapshot._a.m();
+            Argument retVal = new Argument(Object.class, expectedResult);
+            retVal.setPreserved(true);
+
+            MHTransformationGen.createAndCallSequence(retVal, dataSnapshot, _mh, _finalArgs, true);
+        }
+
+        return true;
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/i2c_c2i/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/stress/compiler/i2c_c2i.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine]
+ * VM Testbase comments: 8079714
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     The test attempts to check MethodHandle i2c and c2i adapters by using sequences.
+ *     Then it forces compilation of some of intermediate method handles. The test enables
+ *     diagnostic printing of compilation and analyse it's own standard output
+ *     to see if method is really has been compiled. When some subsequence is compiled,
+ *     the test calls the whole sequence and forces decompilation (by using uncommon trap logic)
+ *     of some smaller subsequence. This way both i2c and c2i adapters are created.
+ *     The test compares result of calling the sequence of MHs with the results computed
+ *     by the test and fails if the result is different.
+ *     The test is a random one, it makes random sequences of MH and calls random subsequences.
+ *     To facilitate reproducing test failures, it prints it's random seed, which can be fed
+ *     to test when reproducing a problem.
+ *     See vm.mlvm.meth.stress.java.sequences.Test for details on MH sequences.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.stress.compiler.i2c_c2i.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.meth.stress.compiler.i2c_c2i.Test
+ */
+
+package vm.mlvm.meth.stress.compiler.i2c_c2i;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.concurrent.CyclicBarrier;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHTransformationGen;
+import vm.mlvm.meth.share.RandomArgumentsGen;
+import vm.mlvm.meth.share.transform.v2.MHMacroTF;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+
+// TODO: check that i2c/c2i adapters are really created
+// TODO: check deopt using vm.mlvm.share.comp framework
+// TODO: use multi-threaded test framework
+public class Test extends MlvmTest {
+
+    private static final int THREADS
+            = Runtime.getRuntime().availableProcessors();
+
+    Object finalTarget() {
+        return new Integer(0);
+    }
+
+    static class A {
+        MHMacroTF trList;
+
+        A(MHMacroTF trList) {
+            this.trList = trList;
+        }
+
+        Object m() throws Throwable {
+            Env.traceNormal("Original m() in thread "
+                    + Thread.currentThread().getName());
+            return MHTransformationGen.callSequence(this.trList, false);
+        }
+    }
+
+    static class B extends A {
+        B() {
+            super(null);
+        }
+
+        @Override
+        Object m() throws Throwable {
+            Env.traceNormal("Deoptimized m() in thread "
+                    + Thread.currentThread().getName());
+            return new Integer(1);
+        }
+    }
+
+    volatile A intermediateTarget;
+
+    Object callIntemediateTarget() throws Throwable {
+        return this.intermediateTarget.m();
+    }
+
+    CyclicBarrier startBarrier = new CyclicBarrier(THREADS + 1);
+
+    volatile boolean testDone = false;
+
+    @Override
+    public boolean run() throws Throwable {
+
+        final MethodHandle mhB = MethodHandles.lookup().findVirtual(Test.class,
+                "finalTarget", MethodType.methodType(Object.class));
+
+        final Argument finalRetVal = Argument.fromValue(new Integer(0));
+        finalRetVal.setPreserved(true);
+
+        this.intermediateTarget = new A(
+                MHTransformationGen.createSequence(finalRetVal, Test.this, mhB,
+                        RandomArgumentsGen.createRandomArgs(true, mhB.type())));
+
+        final MethodHandle mhM = MethodHandles.lookup().findVirtual(Test.class,
+                "callIntemediateTarget", MethodType.methodType(Object.class));
+
+        final Argument[] finalArgs = RandomArgumentsGen.createRandomArgs(true,
+                mhM.type());
+
+        Thread[] threads = new Thread[THREADS];
+        for (int t = 0; t < THREADS; t++) {
+            (threads[t] = new Thread("Stresser " + t) {
+
+                public void run() {
+                    try {
+                        MHMacroTF tList = MHTransformationGen.createSequence(
+                                finalRetVal, Test.this, mhM, finalArgs);
+                        Test.this.startBarrier.await();
+                        while ( ! Test.this.testDone) {
+                            int e = (Integer) Test.this.intermediateTarget.m();
+                            int r = (Integer) MHTransformationGen.callSequence(
+                                    tList, false);
+                            if (r != e)
+                                Env.traceNormal("Wrong result in thread "
+                                        + getName() + ", but this is OK");
+                        }
+                        Env.traceVerbose("Thread " + getName()+ ": work done");
+                    } catch (Throwable t) {
+                        markTestFailed("Exception in thread " + getName(), t);
+                    }
+                }
+            }).start();
+        }
+
+        this.startBarrier.await();
+        Env.traceImportant("Threads started");
+
+        Thread.sleep(3000);
+
+        Env.traceImportant("Deoptimizing");
+        // Force deoptimization in uncommon trap logic
+        this.intermediateTarget = (A) Test.class.getClassLoader().loadClass(
+                Test.class.getName() + "$B").newInstance();
+
+        Thread.sleep(3000);
+
+        this.testDone = true;
+        for (int t = 0; t < THREADS; t++)  {
+            threads[t].join();
+        }
+        return true;
+    }
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/inlineMHTarget/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/inlineMHTarget/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/stress/compiler/inlineMHTarget.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     The test creates MH to short methods that are likely to be inlined and
+ *     verifies that they are inlined into MH code correctly.
+ *     See vm.mlvm.meth.stress.java.sequences.Test for details on MH sequences.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.stress.compiler.inlineMHTarget.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.meth.stress.compiler.inlineMHTarget.Test -stressIterationsFactor 100
+ */
+
+package vm.mlvm.meth.stress.compiler.inlineMHTarget;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandles.Lookup;
+import java.lang.invoke.MethodType;
+
+import nsk.share.test.Stresser;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+
+// TODO: check compilation using vm.mlvm.share.comp framework
+// TODO: enhance to check NxN primitive types
+public class Test extends MlvmTest {
+
+    private static final int ITERATIONS = 10000; // Should be enough to trigger compilation
+
+    private static final int THE_CONSTANT = 42;
+    private int field = 96;
+
+    static int i(int i) { return i; }
+    static int k(int i) { return THE_CONSTANT;  }
+    int getter() { return this.field; }
+
+    int iplusk(int i) { return i(i) + k(i) + getter(); }
+
+    static int mh_iplusk(MethodHandle a, MethodHandle b, MethodHandle c, int i) throws Throwable {
+        return (int) a.invokeExact(i) + (int) b.invokeExact(i) + (int) c.invokeExact();
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+        Lookup l = MethodHandles.lookup();
+        MethodHandle ipluskMH = l.findVirtual(
+                    Test.class, "iplusk", MethodType.methodType(int.class, int.class)
+                ).bindTo(this);
+
+        MethodHandle iMH = MethodHandles.identity(int.class);
+        MethodHandle kMH = MethodHandles.dropArguments(MethodHandles.constant(int.class, THE_CONSTANT), 0, int.class);
+        MethodHandle getterMH = l.findGetter(Test.class, "field", int.class).bindTo(this);
+        MethodHandle mh_ipluskMH = MethodHandles.insertArguments(
+                l.findStatic(Test.class, "mh_iplusk", MethodType.methodType(int.class, MethodHandle.class, MethodHandle.class, MethodHandle.class, int.class)),
+                0, iMH, kMH, getterMH);
+
+        int mh1Result = 0, mh2Result = 0, directResult = 0;
+        Stresser s = createStresser();
+        s.start(1);
+        try {
+            while ( s.continueExecution() ) {
+                for (int i = 0; i < ITERATIONS; i++) {
+                    s.iteration();
+                    mh1Result += (int) ipluskMH.invokeExact(i);
+                    mh2Result += (int) mh_ipluskMH.invokeExact(i);
+                    directResult += iplusk(i);
+                }
+            }
+        } finally {
+            s.finish();
+        }
+
+        if (mh1Result != directResult || mh2Result != directResult) {
+            Env.complain("Sum computed using MH 1=" + mh1Result
+                       + "; Sum computed using MH 2=" + mh2Result
+                       + "; using direct calls=" + directResult);
+            return false;
+        }
+
+        return true;
+    }
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/sequences/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/compiler/sequences/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/stress/compiler/sequences.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine]
+ * VM Testbase comments: 8079714
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Create various long sequences of method handles, adding/removing/joining/splitting arguments.
+ *     Don't verify correctness of results. Just try to stress compiler.
+ *     See vm.mlvm.meth.stress.java.sequences.Test for details on MH sequences.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.stress.compiler.sequences.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.meth.stress.compiler.sequences.Test
+ *      -threadsPerCpu 1
+ *      -threadsExtra 2
+ *      -stressIterationsFactor 1000
+ */
+
+package vm.mlvm.meth.stress.compiler.sequences;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import nsk.share.test.Stresser;
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHTransformationGen;
+import vm.mlvm.meth.share.RandomArgumentsGen;
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.MultiThreadedTest;
+
+//TODO: check deoptimization using vm.mlvm.share.comp framework
+public class Test extends MultiThreadedTest {
+
+    Object target(int i, String s, Float f) {
+        return i + s + f;
+    }
+
+    final MethodHandle _mh;
+    final Argument[] _finalArgs;
+    final Argument _retVal;
+
+    public Test() throws Throwable {
+        super();
+
+        _mh = MethodHandles.lookup().findVirtual(
+                Test.class,
+                "target",
+                MethodType.methodType(Object.class, int.class, String.class, Float.class));
+
+        _finalArgs = RandomArgumentsGen.createRandomArgs(true, _mh.type());
+        _retVal = Argument.fromValue(target(
+                       (Integer) _finalArgs[0].getValue(),
+                       (String) _finalArgs[1].getValue(),
+                       (Float) _finalArgs[2].getValue()));
+        _retVal.setPreserved(true);
+    }
+
+    @Override
+    public boolean runThread(int threadNum) throws Throwable {
+
+        Stresser stresser = createStresser();
+        stresser.start(1);
+        try {
+            while ( stresser.continueExecution() ) {
+                stresser.iteration();
+                MHTransformationGen.callSequence(MHTransformationGen.createSequence(_retVal, Test.this, _mh, _finalArgs), true);
+            }
+        } finally {
+            stresser.finish();
+        }
+
+        return true;
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/callSequencesDuringGC/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/stress/gc/callSequencesDuringGC.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine]
+ * VM Testbase comments: 8079714
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     The test verifies that MH logic is not affected by garbage collector and garbage collector
+ *     correctly walks through references in MHs.
+ *     The test has 3 threads:
+ *     - Thread 1 creates sequences of MH (see vm/mlvm/mh/func/sequences test) and calls them
+ *     - Thread 2 tries to overflow heap with different objects and arrays
+ *     - Thread 3 periodically calls GC
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.stress.gc.callSequencesDuringGC.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.meth.stress.gc.callSequencesDuringGC.Test -stressIterationsFactor 1000
+ */
+
+package vm.mlvm.meth.stress.gc.callSequencesDuringGC;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.List;
+
+import nsk.share.gc.gp.GarbageProducer;
+import nsk.share.gc.gp.GarbageProducers;
+import nsk.share.test.Stresser;
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHTransformationGen;
+import vm.mlvm.meth.share.RandomArgumentsGen;
+import vm.mlvm.share.MlvmTest;
+
+public class Test extends MlvmTest {
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+
+        GCThread dustmanThread = new GCThread();
+        dustmanThread.setDaemon(true);
+        dustmanThread.start();
+
+        LitterThread litterThread = new LitterThread();
+        litterThread.setDaemon(true);
+        litterThread.start();
+
+        Stresser stresser = createStresser();
+        try {
+            stresser.start(1);
+
+            while (stresser.continueExecution()) {
+                stresser.iteration();
+
+                String s = "Ziggy";
+
+                final MethodHandle mhM0 = MethodHandles.lookup().findVirtual(
+                        String.class, "toString",
+                        MethodType.methodType(String.class));
+
+                Argument[] finalArgs = RandomArgumentsGen.createRandomArgs(true, mhM0.type());
+                Argument retVal = Argument.fromValue(s);
+                retVal.setPreserved(true);
+                MHTransformationGen.callSequence(MHTransformationGen.createSequence(retVal, s, mhM0, finalArgs), true);
+            }
+
+            return true;
+        } finally {
+            stresser.finish();
+        }
+    }
+
+    private static class LitterThread extends Thread {
+        @Override
+        public void run() {
+            try {
+                @SuppressWarnings("rawtypes")
+                List<GarbageProducer> gpList = new GarbageProducers()
+                        .getAllProducers();
+
+                for (;;) {
+                    @SuppressWarnings("rawtypes")
+                    GarbageProducer gp = gpList.get(getRNG().nextInt(
+                            gpList.size()));
+                    gp.create(Runtime.getRuntime().maxMemory() / 100);
+
+                    Thread.sleep(10);
+                }
+            } catch (InterruptedException e) {
+            }
+        }
+    }
+
+    private static class GCThread extends Thread {
+        @Override
+        public void run() {
+            try {
+                for (;;) {
+                    System.gc();
+                    Thread.sleep(50);
+                }
+            } catch (InterruptedException e) {
+            }
+        }
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMH/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMH/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/stress/gc/createLotsOfMH.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     The test creates lots of MH to see if they are garbage collected and don't overflow different
+ *     generations of heap (MH used to be allocated in PermGen, but since then they are moved
+ *     to Eden and OldGen).
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.stress.gc.createLotsOfMH.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.meth.stress.gc.createLotsOfMH.Test -stressIterationsFactor 100000
+ */
+
+package vm.mlvm.meth.stress.gc.createLotsOfMH;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandles.Lookup;
+import java.lang.invoke.MethodType;
+
+import nsk.share.test.Stresser;
+import vm.mlvm.share.MlvmTest;
+
+// TODO: add other Lookup.findXXX methods
+
+public class Test extends MlvmTest {
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+        Stresser stresser = createStresser();
+        try {
+            stresser.start(1);
+            Lookup lookup = MethodHandles.lookup();
+            MethodHandle lastMH = lookup.findStatic(getClass(), "main",
+                    MethodType.methodType(void.class, String[].class));
+
+            getLog().display(
+                    "Verifying that no OOME is thrown when creating MHs in a loop");
+            getLog().display(
+                    "Free memory on start (MB): "
+                            + Runtime.getRuntime().freeMemory() / 1024 / 1024);
+
+            while (stresser.continueExecution()) {
+                stresser.iteration();
+                switch (getRNG().nextInt(3)) {
+                case 0:
+                    lastMH = lookup.findConstructor(String.class,
+                            MethodType.methodType(void.class, String.class));
+                    break;
+                case 1:
+                    lastMH = lookup.findVirtual(getClass(), "run",
+                            MethodType.methodType(boolean.class));
+                    break;
+                case 2:
+                    lastMH = lookup.findStatic(ClassLoader.class,
+                            "getSystemClassLoader",
+                            MethodType.methodType(ClassLoader.class));
+                    break;
+                }
+            }
+
+            getLog().display(
+                    "Free memory on end (MB): "
+                            + Runtime.getRuntime().freeMemory() / 1024 / 1024);
+            getLog().display("MHs created: " + stresser.getIteration());
+
+            return true;
+        } finally {
+            stresser.finish();
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMHConsts/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/gc/createLotsOfMHConsts/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @modules java.base/jdk.internal.org.objectweb.asm
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/stress/gc/createLotsOfMHConsts.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     The test loads lots of MH constants (by loading a class that has many of them many times
+ *     using different classloaders) to see if they are garbage collected and don't overflow
+ *     different generations of heap.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ *          /vmTestbase/vm/mlvm/patches
+ *
+ * @comment patch for java.base
+ * @build java.base/*
+ *
+ * @comment build generator
+ * @build vm.mlvm.cp.share.GenCPFullOfMH
+ *
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.stress.gc.createLotsOfMHConsts.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm
+ *      vm.mlvm.meth.stress.gc.createLotsOfMHConsts.Test
+ *      -stressIterationsFactor 100000
+ *      -generator vm.mlvm.cp.share.GenCPFullOfMH
+ */
+
+package vm.mlvm.meth.stress.gc.createLotsOfMHConsts;
+
+import nsk.share.test.Stresser;
+import vm.mlvm.share.ClassfileGeneratorTest;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+
+public class Test extends ClassfileGeneratorTest {
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+        Stresser stresser = createStresser();
+        try {
+            stresser.start(1);
+            while (stresser.continueExecution()) {
+                stresser.iteration();
+                super.run();
+            }
+
+            return true;
+
+        } catch ( OutOfMemoryError e ) {
+            Env.traceNormal(e, "Caught an OOME. This is OK.");
+            return true;
+        } finally {
+            stresser.finish();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/java/sequences/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/java/sequences/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/stress/java/sequences.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine]
+ * VM Testbase comments: 8079714
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Creates a sequence of method handles that manipulates arguments. The following manipulations are used:
+ *     - Numeric conversions
+ *     - Boxing and unboxing
+ *     - Adding arguments, binding arguments
+ *     - Deleting arguments
+ *     - Reordering arguments
+ *     - Array scattering and gathering
+ *     - A MH that calls pair of methods ("guardWithTest")
+ *     - The test calculates the "correct result" of calling the sequence of method handles by using it's own logic and compares it with the result of calling MHs.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.stress.java.sequences.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.meth.stress.java.sequences.Test
+ */
+
+package vm.mlvm.meth.stress.java.sequences;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHTransformationGen;
+import vm.mlvm.meth.share.RandomArgumentsGen;
+import vm.mlvm.share.MlvmTest;
+
+public class Test extends MlvmTest {
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+
+    public static class Example {
+        private Argument[] finalArgs;
+        private boolean eqI;
+        private boolean eqS;
+        private boolean eqF;
+
+        public String m0(int i, String s, Float f) {
+            this.eqI = this.finalArgs[0].getValue().equals(i);
+            this.eqS = this.finalArgs[1].getValue().equals(s);
+            this.eqF = this.finalArgs[2].getValue().equals(f);
+
+            return "i=" + i + " (" + this.eqI + "); " + "s=" + s + " (" + this.eqS
+                    + "); " + "f=" + f + " (" + this.eqF + "); ";
+        }
+
+        public void setFinalArgs(Argument[] finalArgs) {
+            this.finalArgs = finalArgs;
+        }
+
+        public boolean areParametersEqual() {
+            return this.eqI && this.eqS && this.eqF;
+        }
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+
+        final Example e = new Example();
+
+        final MethodHandle mhM0 = MethodHandles.lookup().findVirtual(
+                Example.class,
+                "m0",
+                MethodType.methodType(String.class, int.class, String.class, Float.class));
+
+        Argument[] finalArgs = RandomArgumentsGen.createRandomArgs(true, mhM0.type());
+        e.setFinalArgs(finalArgs);
+
+        Argument finalRetVal = Argument.fromValue(e.m0((int) (Integer) finalArgs[0].getValue(), (String) finalArgs[1].getValue(), (Float) finalArgs[2].getValue()));
+
+        MHTransformationGen.callSequence(MHTransformationGen.createSequence(finalRetVal, e, mhM0, finalArgs), false);
+
+        if (!e.areParametersEqual()) {
+            getLog().complain("Unexpected argument values were received at the final method");
+            return false;
+        }
+
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jdi/breakpointInCompiledCode/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/stress/jdi/breakpointInCompiledCode.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, jdk, quarantine]
+ * VM Testbase comments: 8079714
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     Execute a MethodHandle 10000 times to trigger Hotspot compilation. Set a debugger breakpoint on MH.
+ *     Make few debugger steps, obtaining various information from JVM.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build debuggee class
+ * @build vm.mlvm.share.jdi.MHDebuggee
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.stress.jdi.breakpointInCompiledCode.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm PropertyResolvingWrapper
+ *      vm.mlvm.meth.stress.jdi.breakpointInCompiledCode.Test
+ *      -verbose
+ *      -arch=${os.family}-${os.simpleArch}
+ *      -waittime=5
+ *      -debugee.vmkind=java
+ *      -transport.address=dynamic
+ *      -debugger.debuggeeClass vm.mlvm.share.jdi.MHDebuggee
+ *      -debuggee.iterations 2000
+ *      -debugee.vmkeys="${test.vm.opts} ${test.java.opts}"
+ */
+
+package vm.mlvm.meth.stress.jdi.breakpointInCompiledCode;
+
+import vm.mlvm.share.jdi.ArgumentHandler;
+import vm.mlvm.share.jdi.BreakpointInfo;
+import vm.mlvm.share.jdi.JDIBreakpointTest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Test extends JDIBreakpointTest {
+    // invokeMH:S100,invokePlain:S100,mhTarget,plainTarget,stop
+    @Override
+    protected List<BreakpointInfo> getBreakpoints(String debuggeeClassName) {
+        List<BreakpointInfo> result = new ArrayList<>();
+        {
+            BreakpointInfo info = new BreakpointInfo("invokeMH");
+            info.stepsToTrace = 100;
+            result.add(info);
+        }
+        {
+            BreakpointInfo info = new BreakpointInfo("invokePlain");
+            info.stepsToTrace = 100;
+            result.add(info);
+        }
+        result.add(new BreakpointInfo("mhTarget"));
+        result.add(new BreakpointInfo("plainTarget"));
+        result.add(new BreakpointInfo("stop"));
+
+        return result;
+    }
+
+    public static void main(String[] args) {
+        launch(new ArgumentHandler(args));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/meth/stress/jni/nativeAndMH.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent]
+ * VM Testbase readme:
+ * DESCRIPTION
+ *     The test obtains a MH to a native method and call it. The native method in turn, calls
+ *     another method handle and so on.
+ *     The test verifies that arguments are correctly passed between native methods and MHs.
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.meth.stress.jni.nativeAndMH.Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm/native
+ *      vm.mlvm.meth.stress.jni.nativeAndMH.Test
+ *      -stressIterationsFactor 1000
+ *      -threadsPerCpu 20
+ *      -threadsExtra 20
+ */
+
+package vm.mlvm.meth.stress.jni.nativeAndMH;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import nsk.share.test.Stresser;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.MultiThreadedTest;
+
+public class Test extends MultiThreadedTest {
+
+    private static final String RETURN_VALUE = "test";
+
+    static {
+        System.loadLibrary("nativeAndMH");
+    }
+
+    private static native Object native01(Object a1, String a2, Object a3, Object a4, Object a5, Object a6, MethodHandle mh);
+
+    private static final MethodType MT_calledFromNative = MethodType.methodType(
+            Object.class,
+            Object.class, Object.class, int.class, long.class, double.class, float.class);
+
+    private static Object calledFromNative(Object s1, Object s2, int i, long l, double d, float f) {
+        return RETURN_VALUE;
+    }
+
+    @Override
+    protected boolean runThread(int threadNum) throws Throwable {
+        MethodHandle mh = MethodHandles.lookup().findStatic(
+                Test.class,
+                "calledFromNative",
+                MT_calledFromNative);
+
+        Stresser stresser = createStresser();
+        stresser.start(1);
+
+        while ( stresser.continueExecution() ) {
+            stresser.iteration();
+
+            String retValMH = (String) (Object) mh.invokeExact((Object) "test1", (Object) "test2", 3, 4L, 5D, 6F);
+            String retValNative = (String) native01("test1", "test2", 3, 4L, 5D, 6F, mh).toString();
+
+            if ( ! retValMH.equals(RETURN_VALUE) || ! retValNative.equals(RETURN_VALUE) )
+                markTestFailed("Gold value: " + RETURN_VALUE + "; MH returned: " + retValMH + "; Native returned: " + retValNative);
+            else
+                Env.traceVerbose("Gold value: " + RETURN_VALUE + "; MH returned: " + retValMH + "; Native returned: " + retValNative);
+        }
+
+        stresser.finish();
+        stresser.printExecutionInfo(getLog().getOutStream());
+
+        return true;
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/libnativeAndMH.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include "nsk_tools.c"
+#include "jni_tools.c"
+#include "nativeAndMH.c"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/meth/stress/jni/nativeAndMH/nativeAndMH.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "jni.h"
+#include "jni_tools.h"
+
+#define ARGS_COUNT 6
+
+JNIEXPORT jobject JNICALL
+Java_vm_mlvm_meth_stress_jni_nativeAndMH_Test_native01(
+        JNIEnv * pEnv, jclass clazz,
+        jstring a1,
+        jobject a2,
+        jobject a3,
+        jobject a4,
+        jobject a5,
+        jobject a6,
+        jobject mhToCall)
+{
+    jclass mhClass;
+    jmethodID mid;
+    jclass objectClass;
+    jobjectArray arguments;
+    jobject result;
+
+    if ( ! NSK_JNI_VERIFY(pEnv, (mhClass = NSK_CPP_STUB2(GetObjectClass, pEnv, mhToCall)) != NULL) )
+        return NULL;
+
+    if ( ! NSK_JNI_VERIFY(pEnv, NULL != (mid = NSK_CPP_STUB4(GetMethodID, pEnv, mhClass,
+            "invokeWithArguments",
+            "([Ljava/lang/Object;)Ljava/lang/Object;"))) )
+        return NULL;
+
+    NSK_JNI_VERIFY(pEnv, NULL != (objectClass = NSK_CPP_STUB2(FindClass, pEnv, "java/lang/Object")));
+
+    NSK_JNI_VERIFY(pEnv, NULL != (arguments = NSK_CPP_STUB4(NewObjectArray, pEnv, ARGS_COUNT, objectClass, NULL)));
+
+    NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 0, a1));
+    NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 1, a2));
+    NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 2, a3));
+    NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 3, a4));
+    NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 4, a5));
+    NSK_JNI_VERIFY_VOID(pEnv, NSK_CPP_STUB4(SetObjectArrayElement, pEnv, arguments, 5, a6));
+
+    // Swap arguments
+    NSK_JNI_VERIFY(pEnv, NULL != (result = NSK_CPP_STUB4(CallObjectMethod, pEnv, mhToCall, mid, arguments)));
+    return result;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,18304 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// generated from vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.jmpp
+
+package vm.mlvm.mixed.stress.java.findDeadlock;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.invoke.MutableCallSite;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+import java.lang.reflect.Method;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.locks.ReentrantLock;
+
+import nsk.share.test.Stresser;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Test extends MlvmTest {
+
+    public static final int THREAD_NUM = 999;
+    public static final int ITERATIONS = 1000;
+
+    static ThreadMXBean _threadMXBean = ManagementFactory.getThreadMXBean();
+
+    static Thread[] _threads = new Thread[THREAD_NUM];
+    static ReentrantLock[] _locks = new ReentrantLock[THREAD_NUM];
+    static MethodHandle[] _mh = new MethodHandle[THREAD_NUM];
+    static MutableCallSite[] _cs = new MutableCallSite[THREAD_NUM];
+
+    static CyclicBarrier _threadRaceStartBarrier;
+    static volatile boolean _testFailed;
+    static volatile boolean _testDone;
+    static volatile int _iteration;
+
+    private static int nextLock(int n) { return (n + 1) % THREAD_NUM; }
+
+    private static boolean lock(String place, int n, boolean lockInterruptible) throws Throwable {
+        boolean locked = false;
+        place =  Thread.currentThread().getName() + ": " + place;
+        if ( ! lockInterruptible ) {
+            Env.traceVerbose(place + ": Locking " + n);
+            _locks[n].lock();
+            locked = true;
+        } else {
+            try {
+                Env.traceVerbose(place + ": Locking interruptibly " + n);
+                _locks[n].lockInterruptibly();
+                locked = true;
+
+                if ( ! _testDone )
+                    throw new Exception(place + ": LOCKED " + n);
+                else
+                    Env.traceVerbose(place + ": LOCKED " + n);
+
+            } catch ( InterruptedException swallow ) {
+                Env.traceVerbose(place + ": interrupted while locking " + n);
+            }
+        }
+
+        return locked;
+    }
+
+    private static boolean unlock(String place, int n) throws Throwable {
+        place =  Thread.currentThread().getName() + ": " + place;
+        Env.traceVerbose(place + ": Unlocking " + n);
+        _locks[n].unlock();
+        Env.traceVerbose(place + ": UNLOCKED " + n);
+        return false;
+    }
+
+    static Object bsmt(int lockNum, Object l, Object n, Object m) throws Throwable {
+        DeadlockedThread thread = (DeadlockedThread) Thread.currentThread();
+
+        if ( l instanceof MethodHandles.Lookup ) {
+            // Method is used as BSM
+            Env.traceVerbose(thread.getName() + ": Entered BSM. Lock=" + lockNum);
+
+            if ( _iteration > 0 )
+                throw new Exception("BSM called twice!");
+
+            switch ( lockNum % 3 ) {
+            case 0:
+                thread._lockedCurrent = lock("BSM", lockNum, false);
+                _threadRaceStartBarrier.await();
+                thread._lockedNext = lock("BSM", nextLock(lockNum), true);
+                break;
+
+            case 1:
+                thread._lockedCurrent = lock("BSM", lockNum, false);
+                break;
+
+            case 2:
+                // Do everything in target method
+                break;
+            }
+
+            return (_cs[lockNum] = new MutableCallSite(_mh[lockNum]));
+
+        } else {
+            // Method is used as target
+            Env.traceVerbose(thread.getName() + ": Entered target method. Lock=" + lockNum);
+
+            try {
+                if ( _iteration > 0 ) {
+
+                    switch ( lockNum % 3 ) {
+                    case 0:
+                        thread._lockedCurrent = lock("Target", lockNum, false);
+                        _threadRaceStartBarrier.await();
+                        thread._lockedNext = lock("Target", nextLock(lockNum), true);
+                        break;
+
+                    case 1:
+                        thread._lockedCurrent = lock("Target", lockNum, false);
+                        _threadRaceStartBarrier.await();
+                        Env.traceVerbose(thread.getName() + ": Entering synchronize ( " + lockNum + " )");
+                        synchronized ( _locks[nextLock(lockNum)] ) {
+                        }
+                        Env.traceVerbose(thread.getName() + ": Exited synchronize ( " + lockNum + " )");
+                        break;
+
+                    case 2:
+                        Env.traceVerbose(thread.getName() + ": Entering synchronize ( " + lockNum + " )");
+                        synchronized ( _locks[lockNum] ) {
+                            _threadRaceStartBarrier.await();
+                            thread._lockedNext = lock("Target", nextLock(lockNum), true);
+                            thread._lockedNext = unlock("Target", nextLock(lockNum));
+                        }
+                        Env.traceVerbose(thread.getName() + ": Exited synchronize ( " + lockNum + " )");
+                        break;
+                    }
+
+                } else {
+                    switch ( lockNum % 3 ) {
+                    case 0:
+                        // Everything is done in BSM
+                        break;
+
+                    case 1:
+                        _threadRaceStartBarrier.await();
+                        thread._lockedNext = lock("Target", nextLock(lockNum), true);
+                        break;
+
+                    case 2:
+                        thread._lockedCurrent = lock("Target", lockNum, false);
+                        _threadRaceStartBarrier.await();
+                        thread._lockedNext = lock("Target", nextLock(lockNum), true);
+                        break;
+                    }
+
+                }
+
+                return null;
+            } finally {
+                if ( thread._lockedNext )
+                    thread._lockedNext = unlock("Target", nextLock(lockNum));
+                if ( thread._lockedCurrent )
+                    thread._lockedCurrent = unlock("Target", lockNum);
+            }
+        }
+    }
+
+    // BSM + Indy pairs
+    // 0
+    private static MethodType MT_bootstrap0 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap0 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap0", MT_bootstrap0 ());
+    }
+
+    private static MethodHandle INDY_call0;
+    private static MethodHandle INDY_call0 () throws Throwable {
+        if (INDY_call0 != null) return INDY_call0;
+        CallSite cs = (CallSite) MH_bootstrap0 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap0 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper0 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call0 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap0 (Object l, Object n, Object t) throws Throwable { return _mh[ 0 ].invokeExact(l, n, t); }
+
+    // 1
+    private static MethodType MT_bootstrap1 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap1 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap1", MT_bootstrap1 ());
+    }
+
+    private static MethodHandle INDY_call1;
+    private static MethodHandle INDY_call1 () throws Throwable {
+        if (INDY_call1 != null) return INDY_call1;
+        CallSite cs = (CallSite) MH_bootstrap1 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap1 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper1 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call1 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap1 (Object l, Object n, Object t) throws Throwable { return _mh[ 1 ].invokeExact(l, n, t); }
+
+    // 2
+    private static MethodType MT_bootstrap2 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap2 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap2", MT_bootstrap2 ());
+    }
+
+    private static MethodHandle INDY_call2;
+    private static MethodHandle INDY_call2 () throws Throwable {
+        if (INDY_call2 != null) return INDY_call2;
+        CallSite cs = (CallSite) MH_bootstrap2 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap2 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper2 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call2 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap2 (Object l, Object n, Object t) throws Throwable { return _mh[ 2 ].invokeExact(l, n, t); }
+
+    // 3
+    private static MethodType MT_bootstrap3 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap3 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap3", MT_bootstrap3 ());
+    }
+
+    private static MethodHandle INDY_call3;
+    private static MethodHandle INDY_call3 () throws Throwable {
+        if (INDY_call3 != null) return INDY_call3;
+        CallSite cs = (CallSite) MH_bootstrap3 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap3 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper3 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call3 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap3 (Object l, Object n, Object t) throws Throwable { return _mh[ 3 ].invokeExact(l, n, t); }
+
+    // 4
+    private static MethodType MT_bootstrap4 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap4 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap4", MT_bootstrap4 ());
+    }
+
+    private static MethodHandle INDY_call4;
+    private static MethodHandle INDY_call4 () throws Throwable {
+        if (INDY_call4 != null) return INDY_call4;
+        CallSite cs = (CallSite) MH_bootstrap4 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap4 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper4 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call4 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap4 (Object l, Object n, Object t) throws Throwable { return _mh[ 4 ].invokeExact(l, n, t); }
+
+    // 5
+    private static MethodType MT_bootstrap5 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap5 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap5", MT_bootstrap5 ());
+    }
+
+    private static MethodHandle INDY_call5;
+    private static MethodHandle INDY_call5 () throws Throwable {
+        if (INDY_call5 != null) return INDY_call5;
+        CallSite cs = (CallSite) MH_bootstrap5 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap5 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper5 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call5 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap5 (Object l, Object n, Object t) throws Throwable { return _mh[ 5 ].invokeExact(l, n, t); }
+
+    // 6
+    private static MethodType MT_bootstrap6 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap6 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap6", MT_bootstrap6 ());
+    }
+
+    private static MethodHandle INDY_call6;
+    private static MethodHandle INDY_call6 () throws Throwable {
+        if (INDY_call6 != null) return INDY_call6;
+        CallSite cs = (CallSite) MH_bootstrap6 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap6 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper6 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call6 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap6 (Object l, Object n, Object t) throws Throwable { return _mh[ 6 ].invokeExact(l, n, t); }
+
+    // 7
+    private static MethodType MT_bootstrap7 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap7 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap7", MT_bootstrap7 ());
+    }
+
+    private static MethodHandle INDY_call7;
+    private static MethodHandle INDY_call7 () throws Throwable {
+        if (INDY_call7 != null) return INDY_call7;
+        CallSite cs = (CallSite) MH_bootstrap7 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap7 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper7 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call7 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap7 (Object l, Object n, Object t) throws Throwable { return _mh[ 7 ].invokeExact(l, n, t); }
+
+    // 8
+    private static MethodType MT_bootstrap8 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap8 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap8", MT_bootstrap8 ());
+    }
+
+    private static MethodHandle INDY_call8;
+    private static MethodHandle INDY_call8 () throws Throwable {
+        if (INDY_call8 != null) return INDY_call8;
+        CallSite cs = (CallSite) MH_bootstrap8 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap8 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper8 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call8 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap8 (Object l, Object n, Object t) throws Throwable { return _mh[ 8 ].invokeExact(l, n, t); }
+
+    // 9
+    private static MethodType MT_bootstrap9 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap9 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap9", MT_bootstrap9 ());
+    }
+
+    private static MethodHandle INDY_call9;
+    private static MethodHandle INDY_call9 () throws Throwable {
+        if (INDY_call9 != null) return INDY_call9;
+        CallSite cs = (CallSite) MH_bootstrap9 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap9 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper9 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call9 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap9 (Object l, Object n, Object t) throws Throwable { return _mh[ 9 ].invokeExact(l, n, t); }
+
+    // 10
+    private static MethodType MT_bootstrap10 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap10 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap10", MT_bootstrap10 ());
+    }
+
+    private static MethodHandle INDY_call10;
+    private static MethodHandle INDY_call10 () throws Throwable {
+        if (INDY_call10 != null) return INDY_call10;
+        CallSite cs = (CallSite) MH_bootstrap10 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap10 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper10 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call10 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap10 (Object l, Object n, Object t) throws Throwable { return _mh[ 10 ].invokeExact(l, n, t); }
+
+    // 11
+    private static MethodType MT_bootstrap11 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap11 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap11", MT_bootstrap11 ());
+    }
+
+    private static MethodHandle INDY_call11;
+    private static MethodHandle INDY_call11 () throws Throwable {
+        if (INDY_call11 != null) return INDY_call11;
+        CallSite cs = (CallSite) MH_bootstrap11 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap11 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper11 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call11 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap11 (Object l, Object n, Object t) throws Throwable { return _mh[ 11 ].invokeExact(l, n, t); }
+
+    // 12
+    private static MethodType MT_bootstrap12 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap12 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap12", MT_bootstrap12 ());
+    }
+
+    private static MethodHandle INDY_call12;
+    private static MethodHandle INDY_call12 () throws Throwable {
+        if (INDY_call12 != null) return INDY_call12;
+        CallSite cs = (CallSite) MH_bootstrap12 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap12 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper12 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call12 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap12 (Object l, Object n, Object t) throws Throwable { return _mh[ 12 ].invokeExact(l, n, t); }
+
+    // 13
+    private static MethodType MT_bootstrap13 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap13 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap13", MT_bootstrap13 ());
+    }
+
+    private static MethodHandle INDY_call13;
+    private static MethodHandle INDY_call13 () throws Throwable {
+        if (INDY_call13 != null) return INDY_call13;
+        CallSite cs = (CallSite) MH_bootstrap13 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap13 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper13 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call13 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap13 (Object l, Object n, Object t) throws Throwable { return _mh[ 13 ].invokeExact(l, n, t); }
+
+    // 14
+    private static MethodType MT_bootstrap14 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap14 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap14", MT_bootstrap14 ());
+    }
+
+    private static MethodHandle INDY_call14;
+    private static MethodHandle INDY_call14 () throws Throwable {
+        if (INDY_call14 != null) return INDY_call14;
+        CallSite cs = (CallSite) MH_bootstrap14 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap14 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper14 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call14 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap14 (Object l, Object n, Object t) throws Throwable { return _mh[ 14 ].invokeExact(l, n, t); }
+
+    // 15
+    private static MethodType MT_bootstrap15 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap15 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap15", MT_bootstrap15 ());
+    }
+
+    private static MethodHandle INDY_call15;
+    private static MethodHandle INDY_call15 () throws Throwable {
+        if (INDY_call15 != null) return INDY_call15;
+        CallSite cs = (CallSite) MH_bootstrap15 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap15 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper15 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call15 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap15 (Object l, Object n, Object t) throws Throwable { return _mh[ 15 ].invokeExact(l, n, t); }
+
+    // 16
+    private static MethodType MT_bootstrap16 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap16 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap16", MT_bootstrap16 ());
+    }
+
+    private static MethodHandle INDY_call16;
+    private static MethodHandle INDY_call16 () throws Throwable {
+        if (INDY_call16 != null) return INDY_call16;
+        CallSite cs = (CallSite) MH_bootstrap16 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap16 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper16 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call16 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap16 (Object l, Object n, Object t) throws Throwable { return _mh[ 16 ].invokeExact(l, n, t); }
+
+    // 17
+    private static MethodType MT_bootstrap17 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap17 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap17", MT_bootstrap17 ());
+    }
+
+    private static MethodHandle INDY_call17;
+    private static MethodHandle INDY_call17 () throws Throwable {
+        if (INDY_call17 != null) return INDY_call17;
+        CallSite cs = (CallSite) MH_bootstrap17 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap17 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper17 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call17 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap17 (Object l, Object n, Object t) throws Throwable { return _mh[ 17 ].invokeExact(l, n, t); }
+
+    // 18
+    private static MethodType MT_bootstrap18 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap18 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap18", MT_bootstrap18 ());
+    }
+
+    private static MethodHandle INDY_call18;
+    private static MethodHandle INDY_call18 () throws Throwable {
+        if (INDY_call18 != null) return INDY_call18;
+        CallSite cs = (CallSite) MH_bootstrap18 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap18 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper18 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call18 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap18 (Object l, Object n, Object t) throws Throwable { return _mh[ 18 ].invokeExact(l, n, t); }
+
+    // 19
+    private static MethodType MT_bootstrap19 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap19 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap19", MT_bootstrap19 ());
+    }
+
+    private static MethodHandle INDY_call19;
+    private static MethodHandle INDY_call19 () throws Throwable {
+        if (INDY_call19 != null) return INDY_call19;
+        CallSite cs = (CallSite) MH_bootstrap19 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap19 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper19 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call19 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap19 (Object l, Object n, Object t) throws Throwable { return _mh[ 19 ].invokeExact(l, n, t); }
+
+    // 20
+    private static MethodType MT_bootstrap20 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap20 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap20", MT_bootstrap20 ());
+    }
+
+    private static MethodHandle INDY_call20;
+    private static MethodHandle INDY_call20 () throws Throwable {
+        if (INDY_call20 != null) return INDY_call20;
+        CallSite cs = (CallSite) MH_bootstrap20 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap20 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper20 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call20 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap20 (Object l, Object n, Object t) throws Throwable { return _mh[ 20 ].invokeExact(l, n, t); }
+
+    // 21
+    private static MethodType MT_bootstrap21 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap21 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap21", MT_bootstrap21 ());
+    }
+
+    private static MethodHandle INDY_call21;
+    private static MethodHandle INDY_call21 () throws Throwable {
+        if (INDY_call21 != null) return INDY_call21;
+        CallSite cs = (CallSite) MH_bootstrap21 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap21 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper21 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call21 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap21 (Object l, Object n, Object t) throws Throwable { return _mh[ 21 ].invokeExact(l, n, t); }
+
+    // 22
+    private static MethodType MT_bootstrap22 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap22 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap22", MT_bootstrap22 ());
+    }
+
+    private static MethodHandle INDY_call22;
+    private static MethodHandle INDY_call22 () throws Throwable {
+        if (INDY_call22 != null) return INDY_call22;
+        CallSite cs = (CallSite) MH_bootstrap22 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap22 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper22 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call22 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap22 (Object l, Object n, Object t) throws Throwable { return _mh[ 22 ].invokeExact(l, n, t); }
+
+    // 23
+    private static MethodType MT_bootstrap23 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap23 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap23", MT_bootstrap23 ());
+    }
+
+    private static MethodHandle INDY_call23;
+    private static MethodHandle INDY_call23 () throws Throwable {
+        if (INDY_call23 != null) return INDY_call23;
+        CallSite cs = (CallSite) MH_bootstrap23 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap23 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper23 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call23 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap23 (Object l, Object n, Object t) throws Throwable { return _mh[ 23 ].invokeExact(l, n, t); }
+
+    // 24
+    private static MethodType MT_bootstrap24 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap24 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap24", MT_bootstrap24 ());
+    }
+
+    private static MethodHandle INDY_call24;
+    private static MethodHandle INDY_call24 () throws Throwable {
+        if (INDY_call24 != null) return INDY_call24;
+        CallSite cs = (CallSite) MH_bootstrap24 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap24 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper24 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call24 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap24 (Object l, Object n, Object t) throws Throwable { return _mh[ 24 ].invokeExact(l, n, t); }
+
+    // 25
+    private static MethodType MT_bootstrap25 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap25 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap25", MT_bootstrap25 ());
+    }
+
+    private static MethodHandle INDY_call25;
+    private static MethodHandle INDY_call25 () throws Throwable {
+        if (INDY_call25 != null) return INDY_call25;
+        CallSite cs = (CallSite) MH_bootstrap25 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap25 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper25 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call25 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap25 (Object l, Object n, Object t) throws Throwable { return _mh[ 25 ].invokeExact(l, n, t); }
+
+    // 26
+    private static MethodType MT_bootstrap26 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap26 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap26", MT_bootstrap26 ());
+    }
+
+    private static MethodHandle INDY_call26;
+    private static MethodHandle INDY_call26 () throws Throwable {
+        if (INDY_call26 != null) return INDY_call26;
+        CallSite cs = (CallSite) MH_bootstrap26 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap26 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper26 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call26 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap26 (Object l, Object n, Object t) throws Throwable { return _mh[ 26 ].invokeExact(l, n, t); }
+
+    // 27
+    private static MethodType MT_bootstrap27 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap27 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap27", MT_bootstrap27 ());
+    }
+
+    private static MethodHandle INDY_call27;
+    private static MethodHandle INDY_call27 () throws Throwable {
+        if (INDY_call27 != null) return INDY_call27;
+        CallSite cs = (CallSite) MH_bootstrap27 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap27 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper27 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call27 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap27 (Object l, Object n, Object t) throws Throwable { return _mh[ 27 ].invokeExact(l, n, t); }
+
+    // 28
+    private static MethodType MT_bootstrap28 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap28 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap28", MT_bootstrap28 ());
+    }
+
+    private static MethodHandle INDY_call28;
+    private static MethodHandle INDY_call28 () throws Throwable {
+        if (INDY_call28 != null) return INDY_call28;
+        CallSite cs = (CallSite) MH_bootstrap28 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap28 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper28 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call28 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap28 (Object l, Object n, Object t) throws Throwable { return _mh[ 28 ].invokeExact(l, n, t); }
+
+    // 29
+    private static MethodType MT_bootstrap29 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap29 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap29", MT_bootstrap29 ());
+    }
+
+    private static MethodHandle INDY_call29;
+    private static MethodHandle INDY_call29 () throws Throwable {
+        if (INDY_call29 != null) return INDY_call29;
+        CallSite cs = (CallSite) MH_bootstrap29 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap29 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper29 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call29 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap29 (Object l, Object n, Object t) throws Throwable { return _mh[ 29 ].invokeExact(l, n, t); }
+
+    // 30
+    private static MethodType MT_bootstrap30 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap30 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap30", MT_bootstrap30 ());
+    }
+
+    private static MethodHandle INDY_call30;
+    private static MethodHandle INDY_call30 () throws Throwable {
+        if (INDY_call30 != null) return INDY_call30;
+        CallSite cs = (CallSite) MH_bootstrap30 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap30 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper30 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call30 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap30 (Object l, Object n, Object t) throws Throwable { return _mh[ 30 ].invokeExact(l, n, t); }
+
+    // 31
+    private static MethodType MT_bootstrap31 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap31 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap31", MT_bootstrap31 ());
+    }
+
+    private static MethodHandle INDY_call31;
+    private static MethodHandle INDY_call31 () throws Throwable {
+        if (INDY_call31 != null) return INDY_call31;
+        CallSite cs = (CallSite) MH_bootstrap31 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap31 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper31 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call31 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap31 (Object l, Object n, Object t) throws Throwable { return _mh[ 31 ].invokeExact(l, n, t); }
+
+    // 32
+    private static MethodType MT_bootstrap32 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap32 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap32", MT_bootstrap32 ());
+    }
+
+    private static MethodHandle INDY_call32;
+    private static MethodHandle INDY_call32 () throws Throwable {
+        if (INDY_call32 != null) return INDY_call32;
+        CallSite cs = (CallSite) MH_bootstrap32 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap32 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper32 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call32 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap32 (Object l, Object n, Object t) throws Throwable { return _mh[ 32 ].invokeExact(l, n, t); }
+
+    // 33
+    private static MethodType MT_bootstrap33 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap33 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap33", MT_bootstrap33 ());
+    }
+
+    private static MethodHandle INDY_call33;
+    private static MethodHandle INDY_call33 () throws Throwable {
+        if (INDY_call33 != null) return INDY_call33;
+        CallSite cs = (CallSite) MH_bootstrap33 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap33 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper33 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call33 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap33 (Object l, Object n, Object t) throws Throwable { return _mh[ 33 ].invokeExact(l, n, t); }
+
+    // 34
+    private static MethodType MT_bootstrap34 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap34 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap34", MT_bootstrap34 ());
+    }
+
+    private static MethodHandle INDY_call34;
+    private static MethodHandle INDY_call34 () throws Throwable {
+        if (INDY_call34 != null) return INDY_call34;
+        CallSite cs = (CallSite) MH_bootstrap34 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap34 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper34 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call34 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap34 (Object l, Object n, Object t) throws Throwable { return _mh[ 34 ].invokeExact(l, n, t); }
+
+    // 35
+    private static MethodType MT_bootstrap35 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap35 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap35", MT_bootstrap35 ());
+    }
+
+    private static MethodHandle INDY_call35;
+    private static MethodHandle INDY_call35 () throws Throwable {
+        if (INDY_call35 != null) return INDY_call35;
+        CallSite cs = (CallSite) MH_bootstrap35 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap35 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper35 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call35 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap35 (Object l, Object n, Object t) throws Throwable { return _mh[ 35 ].invokeExact(l, n, t); }
+
+    // 36
+    private static MethodType MT_bootstrap36 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap36 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap36", MT_bootstrap36 ());
+    }
+
+    private static MethodHandle INDY_call36;
+    private static MethodHandle INDY_call36 () throws Throwable {
+        if (INDY_call36 != null) return INDY_call36;
+        CallSite cs = (CallSite) MH_bootstrap36 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap36 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper36 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call36 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap36 (Object l, Object n, Object t) throws Throwable { return _mh[ 36 ].invokeExact(l, n, t); }
+
+    // 37
+    private static MethodType MT_bootstrap37 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap37 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap37", MT_bootstrap37 ());
+    }
+
+    private static MethodHandle INDY_call37;
+    private static MethodHandle INDY_call37 () throws Throwable {
+        if (INDY_call37 != null) return INDY_call37;
+        CallSite cs = (CallSite) MH_bootstrap37 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap37 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper37 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call37 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap37 (Object l, Object n, Object t) throws Throwable { return _mh[ 37 ].invokeExact(l, n, t); }
+
+    // 38
+    private static MethodType MT_bootstrap38 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap38 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap38", MT_bootstrap38 ());
+    }
+
+    private static MethodHandle INDY_call38;
+    private static MethodHandle INDY_call38 () throws Throwable {
+        if (INDY_call38 != null) return INDY_call38;
+        CallSite cs = (CallSite) MH_bootstrap38 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap38 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper38 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call38 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap38 (Object l, Object n, Object t) throws Throwable { return _mh[ 38 ].invokeExact(l, n, t); }
+
+    // 39
+    private static MethodType MT_bootstrap39 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap39 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap39", MT_bootstrap39 ());
+    }
+
+    private static MethodHandle INDY_call39;
+    private static MethodHandle INDY_call39 () throws Throwable {
+        if (INDY_call39 != null) return INDY_call39;
+        CallSite cs = (CallSite) MH_bootstrap39 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap39 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper39 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call39 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap39 (Object l, Object n, Object t) throws Throwable { return _mh[ 39 ].invokeExact(l, n, t); }
+
+    // 40
+    private static MethodType MT_bootstrap40 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap40 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap40", MT_bootstrap40 ());
+    }
+
+    private static MethodHandle INDY_call40;
+    private static MethodHandle INDY_call40 () throws Throwable {
+        if (INDY_call40 != null) return INDY_call40;
+        CallSite cs = (CallSite) MH_bootstrap40 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap40 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper40 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call40 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap40 (Object l, Object n, Object t) throws Throwable { return _mh[ 40 ].invokeExact(l, n, t); }
+
+    // 41
+    private static MethodType MT_bootstrap41 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap41 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap41", MT_bootstrap41 ());
+    }
+
+    private static MethodHandle INDY_call41;
+    private static MethodHandle INDY_call41 () throws Throwable {
+        if (INDY_call41 != null) return INDY_call41;
+        CallSite cs = (CallSite) MH_bootstrap41 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap41 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper41 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call41 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap41 (Object l, Object n, Object t) throws Throwable { return _mh[ 41 ].invokeExact(l, n, t); }
+
+    // 42
+    private static MethodType MT_bootstrap42 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap42 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap42", MT_bootstrap42 ());
+    }
+
+    private static MethodHandle INDY_call42;
+    private static MethodHandle INDY_call42 () throws Throwable {
+        if (INDY_call42 != null) return INDY_call42;
+        CallSite cs = (CallSite) MH_bootstrap42 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap42 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper42 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call42 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap42 (Object l, Object n, Object t) throws Throwable { return _mh[ 42 ].invokeExact(l, n, t); }
+
+    // 43
+    private static MethodType MT_bootstrap43 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap43 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap43", MT_bootstrap43 ());
+    }
+
+    private static MethodHandle INDY_call43;
+    private static MethodHandle INDY_call43 () throws Throwable {
+        if (INDY_call43 != null) return INDY_call43;
+        CallSite cs = (CallSite) MH_bootstrap43 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap43 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper43 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call43 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap43 (Object l, Object n, Object t) throws Throwable { return _mh[ 43 ].invokeExact(l, n, t); }
+
+    // 44
+    private static MethodType MT_bootstrap44 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap44 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap44", MT_bootstrap44 ());
+    }
+
+    private static MethodHandle INDY_call44;
+    private static MethodHandle INDY_call44 () throws Throwable {
+        if (INDY_call44 != null) return INDY_call44;
+        CallSite cs = (CallSite) MH_bootstrap44 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap44 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper44 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call44 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap44 (Object l, Object n, Object t) throws Throwable { return _mh[ 44 ].invokeExact(l, n, t); }
+
+    // 45
+    private static MethodType MT_bootstrap45 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap45 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap45", MT_bootstrap45 ());
+    }
+
+    private static MethodHandle INDY_call45;
+    private static MethodHandle INDY_call45 () throws Throwable {
+        if (INDY_call45 != null) return INDY_call45;
+        CallSite cs = (CallSite) MH_bootstrap45 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap45 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper45 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call45 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap45 (Object l, Object n, Object t) throws Throwable { return _mh[ 45 ].invokeExact(l, n, t); }
+
+    // 46
+    private static MethodType MT_bootstrap46 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap46 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap46", MT_bootstrap46 ());
+    }
+
+    private static MethodHandle INDY_call46;
+    private static MethodHandle INDY_call46 () throws Throwable {
+        if (INDY_call46 != null) return INDY_call46;
+        CallSite cs = (CallSite) MH_bootstrap46 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap46 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper46 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call46 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap46 (Object l, Object n, Object t) throws Throwable { return _mh[ 46 ].invokeExact(l, n, t); }
+
+    // 47
+    private static MethodType MT_bootstrap47 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap47 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap47", MT_bootstrap47 ());
+    }
+
+    private static MethodHandle INDY_call47;
+    private static MethodHandle INDY_call47 () throws Throwable {
+        if (INDY_call47 != null) return INDY_call47;
+        CallSite cs = (CallSite) MH_bootstrap47 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap47 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper47 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call47 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap47 (Object l, Object n, Object t) throws Throwable { return _mh[ 47 ].invokeExact(l, n, t); }
+
+    // 48
+    private static MethodType MT_bootstrap48 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap48 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap48", MT_bootstrap48 ());
+    }
+
+    private static MethodHandle INDY_call48;
+    private static MethodHandle INDY_call48 () throws Throwable {
+        if (INDY_call48 != null) return INDY_call48;
+        CallSite cs = (CallSite) MH_bootstrap48 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap48 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper48 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call48 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap48 (Object l, Object n, Object t) throws Throwable { return _mh[ 48 ].invokeExact(l, n, t); }
+
+    // 49
+    private static MethodType MT_bootstrap49 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap49 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap49", MT_bootstrap49 ());
+    }
+
+    private static MethodHandle INDY_call49;
+    private static MethodHandle INDY_call49 () throws Throwable {
+        if (INDY_call49 != null) return INDY_call49;
+        CallSite cs = (CallSite) MH_bootstrap49 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap49 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper49 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call49 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap49 (Object l, Object n, Object t) throws Throwable { return _mh[ 49 ].invokeExact(l, n, t); }
+
+    // 50
+    private static MethodType MT_bootstrap50 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap50 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap50", MT_bootstrap50 ());
+    }
+
+    private static MethodHandle INDY_call50;
+    private static MethodHandle INDY_call50 () throws Throwable {
+        if (INDY_call50 != null) return INDY_call50;
+        CallSite cs = (CallSite) MH_bootstrap50 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap50 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper50 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call50 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap50 (Object l, Object n, Object t) throws Throwable { return _mh[ 50 ].invokeExact(l, n, t); }
+
+    // 51
+    private static MethodType MT_bootstrap51 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap51 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap51", MT_bootstrap51 ());
+    }
+
+    private static MethodHandle INDY_call51;
+    private static MethodHandle INDY_call51 () throws Throwable {
+        if (INDY_call51 != null) return INDY_call51;
+        CallSite cs = (CallSite) MH_bootstrap51 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap51 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper51 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call51 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap51 (Object l, Object n, Object t) throws Throwable { return _mh[ 51 ].invokeExact(l, n, t); }
+
+    // 52
+    private static MethodType MT_bootstrap52 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap52 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap52", MT_bootstrap52 ());
+    }
+
+    private static MethodHandle INDY_call52;
+    private static MethodHandle INDY_call52 () throws Throwable {
+        if (INDY_call52 != null) return INDY_call52;
+        CallSite cs = (CallSite) MH_bootstrap52 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap52 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper52 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call52 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap52 (Object l, Object n, Object t) throws Throwable { return _mh[ 52 ].invokeExact(l, n, t); }
+
+    // 53
+    private static MethodType MT_bootstrap53 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap53 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap53", MT_bootstrap53 ());
+    }
+
+    private static MethodHandle INDY_call53;
+    private static MethodHandle INDY_call53 () throws Throwable {
+        if (INDY_call53 != null) return INDY_call53;
+        CallSite cs = (CallSite) MH_bootstrap53 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap53 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper53 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call53 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap53 (Object l, Object n, Object t) throws Throwable { return _mh[ 53 ].invokeExact(l, n, t); }
+
+    // 54
+    private static MethodType MT_bootstrap54 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap54 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap54", MT_bootstrap54 ());
+    }
+
+    private static MethodHandle INDY_call54;
+    private static MethodHandle INDY_call54 () throws Throwable {
+        if (INDY_call54 != null) return INDY_call54;
+        CallSite cs = (CallSite) MH_bootstrap54 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap54 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper54 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call54 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap54 (Object l, Object n, Object t) throws Throwable { return _mh[ 54 ].invokeExact(l, n, t); }
+
+    // 55
+    private static MethodType MT_bootstrap55 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap55 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap55", MT_bootstrap55 ());
+    }
+
+    private static MethodHandle INDY_call55;
+    private static MethodHandle INDY_call55 () throws Throwable {
+        if (INDY_call55 != null) return INDY_call55;
+        CallSite cs = (CallSite) MH_bootstrap55 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap55 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper55 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call55 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap55 (Object l, Object n, Object t) throws Throwable { return _mh[ 55 ].invokeExact(l, n, t); }
+
+    // 56
+    private static MethodType MT_bootstrap56 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap56 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap56", MT_bootstrap56 ());
+    }
+
+    private static MethodHandle INDY_call56;
+    private static MethodHandle INDY_call56 () throws Throwable {
+        if (INDY_call56 != null) return INDY_call56;
+        CallSite cs = (CallSite) MH_bootstrap56 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap56 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper56 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call56 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap56 (Object l, Object n, Object t) throws Throwable { return _mh[ 56 ].invokeExact(l, n, t); }
+
+    // 57
+    private static MethodType MT_bootstrap57 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap57 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap57", MT_bootstrap57 ());
+    }
+
+    private static MethodHandle INDY_call57;
+    private static MethodHandle INDY_call57 () throws Throwable {
+        if (INDY_call57 != null) return INDY_call57;
+        CallSite cs = (CallSite) MH_bootstrap57 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap57 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper57 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call57 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap57 (Object l, Object n, Object t) throws Throwable { return _mh[ 57 ].invokeExact(l, n, t); }
+
+    // 58
+    private static MethodType MT_bootstrap58 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap58 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap58", MT_bootstrap58 ());
+    }
+
+    private static MethodHandle INDY_call58;
+    private static MethodHandle INDY_call58 () throws Throwable {
+        if (INDY_call58 != null) return INDY_call58;
+        CallSite cs = (CallSite) MH_bootstrap58 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap58 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper58 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call58 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap58 (Object l, Object n, Object t) throws Throwable { return _mh[ 58 ].invokeExact(l, n, t); }
+
+    // 59
+    private static MethodType MT_bootstrap59 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap59 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap59", MT_bootstrap59 ());
+    }
+
+    private static MethodHandle INDY_call59;
+    private static MethodHandle INDY_call59 () throws Throwable {
+        if (INDY_call59 != null) return INDY_call59;
+        CallSite cs = (CallSite) MH_bootstrap59 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap59 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper59 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call59 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap59 (Object l, Object n, Object t) throws Throwable { return _mh[ 59 ].invokeExact(l, n, t); }
+
+    // 60
+    private static MethodType MT_bootstrap60 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap60 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap60", MT_bootstrap60 ());
+    }
+
+    private static MethodHandle INDY_call60;
+    private static MethodHandle INDY_call60 () throws Throwable {
+        if (INDY_call60 != null) return INDY_call60;
+        CallSite cs = (CallSite) MH_bootstrap60 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap60 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper60 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call60 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap60 (Object l, Object n, Object t) throws Throwable { return _mh[ 60 ].invokeExact(l, n, t); }
+
+    // 61
+    private static MethodType MT_bootstrap61 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap61 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap61", MT_bootstrap61 ());
+    }
+
+    private static MethodHandle INDY_call61;
+    private static MethodHandle INDY_call61 () throws Throwable {
+        if (INDY_call61 != null) return INDY_call61;
+        CallSite cs = (CallSite) MH_bootstrap61 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap61 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper61 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call61 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap61 (Object l, Object n, Object t) throws Throwable { return _mh[ 61 ].invokeExact(l, n, t); }
+
+    // 62
+    private static MethodType MT_bootstrap62 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap62 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap62", MT_bootstrap62 ());
+    }
+
+    private static MethodHandle INDY_call62;
+    private static MethodHandle INDY_call62 () throws Throwable {
+        if (INDY_call62 != null) return INDY_call62;
+        CallSite cs = (CallSite) MH_bootstrap62 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap62 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper62 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call62 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap62 (Object l, Object n, Object t) throws Throwable { return _mh[ 62 ].invokeExact(l, n, t); }
+
+    // 63
+    private static MethodType MT_bootstrap63 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap63 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap63", MT_bootstrap63 ());
+    }
+
+    private static MethodHandle INDY_call63;
+    private static MethodHandle INDY_call63 () throws Throwable {
+        if (INDY_call63 != null) return INDY_call63;
+        CallSite cs = (CallSite) MH_bootstrap63 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap63 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper63 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call63 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap63 (Object l, Object n, Object t) throws Throwable { return _mh[ 63 ].invokeExact(l, n, t); }
+
+    // 64
+    private static MethodType MT_bootstrap64 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap64 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap64", MT_bootstrap64 ());
+    }
+
+    private static MethodHandle INDY_call64;
+    private static MethodHandle INDY_call64 () throws Throwable {
+        if (INDY_call64 != null) return INDY_call64;
+        CallSite cs = (CallSite) MH_bootstrap64 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap64 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper64 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call64 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap64 (Object l, Object n, Object t) throws Throwable { return _mh[ 64 ].invokeExact(l, n, t); }
+
+    // 65
+    private static MethodType MT_bootstrap65 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap65 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap65", MT_bootstrap65 ());
+    }
+
+    private static MethodHandle INDY_call65;
+    private static MethodHandle INDY_call65 () throws Throwable {
+        if (INDY_call65 != null) return INDY_call65;
+        CallSite cs = (CallSite) MH_bootstrap65 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap65 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper65 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call65 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap65 (Object l, Object n, Object t) throws Throwable { return _mh[ 65 ].invokeExact(l, n, t); }
+
+    // 66
+    private static MethodType MT_bootstrap66 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap66 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap66", MT_bootstrap66 ());
+    }
+
+    private static MethodHandle INDY_call66;
+    private static MethodHandle INDY_call66 () throws Throwable {
+        if (INDY_call66 != null) return INDY_call66;
+        CallSite cs = (CallSite) MH_bootstrap66 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap66 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper66 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call66 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap66 (Object l, Object n, Object t) throws Throwable { return _mh[ 66 ].invokeExact(l, n, t); }
+
+    // 67
+    private static MethodType MT_bootstrap67 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap67 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap67", MT_bootstrap67 ());
+    }
+
+    private static MethodHandle INDY_call67;
+    private static MethodHandle INDY_call67 () throws Throwable {
+        if (INDY_call67 != null) return INDY_call67;
+        CallSite cs = (CallSite) MH_bootstrap67 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap67 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper67 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call67 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap67 (Object l, Object n, Object t) throws Throwable { return _mh[ 67 ].invokeExact(l, n, t); }
+
+    // 68
+    private static MethodType MT_bootstrap68 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap68 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap68", MT_bootstrap68 ());
+    }
+
+    private static MethodHandle INDY_call68;
+    private static MethodHandle INDY_call68 () throws Throwable {
+        if (INDY_call68 != null) return INDY_call68;
+        CallSite cs = (CallSite) MH_bootstrap68 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap68 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper68 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call68 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap68 (Object l, Object n, Object t) throws Throwable { return _mh[ 68 ].invokeExact(l, n, t); }
+
+    // 69
+    private static MethodType MT_bootstrap69 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap69 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap69", MT_bootstrap69 ());
+    }
+
+    private static MethodHandle INDY_call69;
+    private static MethodHandle INDY_call69 () throws Throwable {
+        if (INDY_call69 != null) return INDY_call69;
+        CallSite cs = (CallSite) MH_bootstrap69 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap69 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper69 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call69 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap69 (Object l, Object n, Object t) throws Throwable { return _mh[ 69 ].invokeExact(l, n, t); }
+
+    // 70
+    private static MethodType MT_bootstrap70 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap70 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap70", MT_bootstrap70 ());
+    }
+
+    private static MethodHandle INDY_call70;
+    private static MethodHandle INDY_call70 () throws Throwable {
+        if (INDY_call70 != null) return INDY_call70;
+        CallSite cs = (CallSite) MH_bootstrap70 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap70 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper70 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call70 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap70 (Object l, Object n, Object t) throws Throwable { return _mh[ 70 ].invokeExact(l, n, t); }
+
+    // 71
+    private static MethodType MT_bootstrap71 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap71 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap71", MT_bootstrap71 ());
+    }
+
+    private static MethodHandle INDY_call71;
+    private static MethodHandle INDY_call71 () throws Throwable {
+        if (INDY_call71 != null) return INDY_call71;
+        CallSite cs = (CallSite) MH_bootstrap71 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap71 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper71 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call71 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap71 (Object l, Object n, Object t) throws Throwable { return _mh[ 71 ].invokeExact(l, n, t); }
+
+    // 72
+    private static MethodType MT_bootstrap72 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap72 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap72", MT_bootstrap72 ());
+    }
+
+    private static MethodHandle INDY_call72;
+    private static MethodHandle INDY_call72 () throws Throwable {
+        if (INDY_call72 != null) return INDY_call72;
+        CallSite cs = (CallSite) MH_bootstrap72 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap72 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper72 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call72 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap72 (Object l, Object n, Object t) throws Throwable { return _mh[ 72 ].invokeExact(l, n, t); }
+
+    // 73
+    private static MethodType MT_bootstrap73 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap73 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap73", MT_bootstrap73 ());
+    }
+
+    private static MethodHandle INDY_call73;
+    private static MethodHandle INDY_call73 () throws Throwable {
+        if (INDY_call73 != null) return INDY_call73;
+        CallSite cs = (CallSite) MH_bootstrap73 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap73 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper73 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call73 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap73 (Object l, Object n, Object t) throws Throwable { return _mh[ 73 ].invokeExact(l, n, t); }
+
+    // 74
+    private static MethodType MT_bootstrap74 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap74 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap74", MT_bootstrap74 ());
+    }
+
+    private static MethodHandle INDY_call74;
+    private static MethodHandle INDY_call74 () throws Throwable {
+        if (INDY_call74 != null) return INDY_call74;
+        CallSite cs = (CallSite) MH_bootstrap74 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap74 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper74 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call74 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap74 (Object l, Object n, Object t) throws Throwable { return _mh[ 74 ].invokeExact(l, n, t); }
+
+    // 75
+    private static MethodType MT_bootstrap75 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap75 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap75", MT_bootstrap75 ());
+    }
+
+    private static MethodHandle INDY_call75;
+    private static MethodHandle INDY_call75 () throws Throwable {
+        if (INDY_call75 != null) return INDY_call75;
+        CallSite cs = (CallSite) MH_bootstrap75 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap75 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper75 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call75 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap75 (Object l, Object n, Object t) throws Throwable { return _mh[ 75 ].invokeExact(l, n, t); }
+
+    // 76
+    private static MethodType MT_bootstrap76 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap76 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap76", MT_bootstrap76 ());
+    }
+
+    private static MethodHandle INDY_call76;
+    private static MethodHandle INDY_call76 () throws Throwable {
+        if (INDY_call76 != null) return INDY_call76;
+        CallSite cs = (CallSite) MH_bootstrap76 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap76 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper76 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call76 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap76 (Object l, Object n, Object t) throws Throwable { return _mh[ 76 ].invokeExact(l, n, t); }
+
+    // 77
+    private static MethodType MT_bootstrap77 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap77 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap77", MT_bootstrap77 ());
+    }
+
+    private static MethodHandle INDY_call77;
+    private static MethodHandle INDY_call77 () throws Throwable {
+        if (INDY_call77 != null) return INDY_call77;
+        CallSite cs = (CallSite) MH_bootstrap77 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap77 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper77 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call77 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap77 (Object l, Object n, Object t) throws Throwable { return _mh[ 77 ].invokeExact(l, n, t); }
+
+    // 78
+    private static MethodType MT_bootstrap78 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap78 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap78", MT_bootstrap78 ());
+    }
+
+    private static MethodHandle INDY_call78;
+    private static MethodHandle INDY_call78 () throws Throwable {
+        if (INDY_call78 != null) return INDY_call78;
+        CallSite cs = (CallSite) MH_bootstrap78 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap78 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper78 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call78 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap78 (Object l, Object n, Object t) throws Throwable { return _mh[ 78 ].invokeExact(l, n, t); }
+
+    // 79
+    private static MethodType MT_bootstrap79 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap79 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap79", MT_bootstrap79 ());
+    }
+
+    private static MethodHandle INDY_call79;
+    private static MethodHandle INDY_call79 () throws Throwable {
+        if (INDY_call79 != null) return INDY_call79;
+        CallSite cs = (CallSite) MH_bootstrap79 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap79 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper79 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call79 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap79 (Object l, Object n, Object t) throws Throwable { return _mh[ 79 ].invokeExact(l, n, t); }
+
+    // 80
+    private static MethodType MT_bootstrap80 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap80 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap80", MT_bootstrap80 ());
+    }
+
+    private static MethodHandle INDY_call80;
+    private static MethodHandle INDY_call80 () throws Throwable {
+        if (INDY_call80 != null) return INDY_call80;
+        CallSite cs = (CallSite) MH_bootstrap80 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap80 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper80 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call80 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap80 (Object l, Object n, Object t) throws Throwable { return _mh[ 80 ].invokeExact(l, n, t); }
+
+    // 81
+    private static MethodType MT_bootstrap81 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap81 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap81", MT_bootstrap81 ());
+    }
+
+    private static MethodHandle INDY_call81;
+    private static MethodHandle INDY_call81 () throws Throwable {
+        if (INDY_call81 != null) return INDY_call81;
+        CallSite cs = (CallSite) MH_bootstrap81 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap81 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper81 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call81 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap81 (Object l, Object n, Object t) throws Throwable { return _mh[ 81 ].invokeExact(l, n, t); }
+
+    // 82
+    private static MethodType MT_bootstrap82 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap82 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap82", MT_bootstrap82 ());
+    }
+
+    private static MethodHandle INDY_call82;
+    private static MethodHandle INDY_call82 () throws Throwable {
+        if (INDY_call82 != null) return INDY_call82;
+        CallSite cs = (CallSite) MH_bootstrap82 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap82 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper82 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call82 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap82 (Object l, Object n, Object t) throws Throwable { return _mh[ 82 ].invokeExact(l, n, t); }
+
+    // 83
+    private static MethodType MT_bootstrap83 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap83 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap83", MT_bootstrap83 ());
+    }
+
+    private static MethodHandle INDY_call83;
+    private static MethodHandle INDY_call83 () throws Throwable {
+        if (INDY_call83 != null) return INDY_call83;
+        CallSite cs = (CallSite) MH_bootstrap83 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap83 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper83 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call83 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap83 (Object l, Object n, Object t) throws Throwable { return _mh[ 83 ].invokeExact(l, n, t); }
+
+    // 84
+    private static MethodType MT_bootstrap84 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap84 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap84", MT_bootstrap84 ());
+    }
+
+    private static MethodHandle INDY_call84;
+    private static MethodHandle INDY_call84 () throws Throwable {
+        if (INDY_call84 != null) return INDY_call84;
+        CallSite cs = (CallSite) MH_bootstrap84 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap84 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper84 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call84 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap84 (Object l, Object n, Object t) throws Throwable { return _mh[ 84 ].invokeExact(l, n, t); }
+
+    // 85
+    private static MethodType MT_bootstrap85 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap85 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap85", MT_bootstrap85 ());
+    }
+
+    private static MethodHandle INDY_call85;
+    private static MethodHandle INDY_call85 () throws Throwable {
+        if (INDY_call85 != null) return INDY_call85;
+        CallSite cs = (CallSite) MH_bootstrap85 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap85 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper85 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call85 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap85 (Object l, Object n, Object t) throws Throwable { return _mh[ 85 ].invokeExact(l, n, t); }
+
+    // 86
+    private static MethodType MT_bootstrap86 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap86 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap86", MT_bootstrap86 ());
+    }
+
+    private static MethodHandle INDY_call86;
+    private static MethodHandle INDY_call86 () throws Throwable {
+        if (INDY_call86 != null) return INDY_call86;
+        CallSite cs = (CallSite) MH_bootstrap86 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap86 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper86 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call86 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap86 (Object l, Object n, Object t) throws Throwable { return _mh[ 86 ].invokeExact(l, n, t); }
+
+    // 87
+    private static MethodType MT_bootstrap87 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap87 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap87", MT_bootstrap87 ());
+    }
+
+    private static MethodHandle INDY_call87;
+    private static MethodHandle INDY_call87 () throws Throwable {
+        if (INDY_call87 != null) return INDY_call87;
+        CallSite cs = (CallSite) MH_bootstrap87 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap87 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper87 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call87 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap87 (Object l, Object n, Object t) throws Throwable { return _mh[ 87 ].invokeExact(l, n, t); }
+
+    // 88
+    private static MethodType MT_bootstrap88 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap88 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap88", MT_bootstrap88 ());
+    }
+
+    private static MethodHandle INDY_call88;
+    private static MethodHandle INDY_call88 () throws Throwable {
+        if (INDY_call88 != null) return INDY_call88;
+        CallSite cs = (CallSite) MH_bootstrap88 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap88 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper88 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call88 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap88 (Object l, Object n, Object t) throws Throwable { return _mh[ 88 ].invokeExact(l, n, t); }
+
+    // 89
+    private static MethodType MT_bootstrap89 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap89 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap89", MT_bootstrap89 ());
+    }
+
+    private static MethodHandle INDY_call89;
+    private static MethodHandle INDY_call89 () throws Throwable {
+        if (INDY_call89 != null) return INDY_call89;
+        CallSite cs = (CallSite) MH_bootstrap89 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap89 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper89 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call89 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap89 (Object l, Object n, Object t) throws Throwable { return _mh[ 89 ].invokeExact(l, n, t); }
+
+    // 90
+    private static MethodType MT_bootstrap90 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap90 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap90", MT_bootstrap90 ());
+    }
+
+    private static MethodHandle INDY_call90;
+    private static MethodHandle INDY_call90 () throws Throwable {
+        if (INDY_call90 != null) return INDY_call90;
+        CallSite cs = (CallSite) MH_bootstrap90 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap90 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper90 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call90 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap90 (Object l, Object n, Object t) throws Throwable { return _mh[ 90 ].invokeExact(l, n, t); }
+
+    // 91
+    private static MethodType MT_bootstrap91 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap91 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap91", MT_bootstrap91 ());
+    }
+
+    private static MethodHandle INDY_call91;
+    private static MethodHandle INDY_call91 () throws Throwable {
+        if (INDY_call91 != null) return INDY_call91;
+        CallSite cs = (CallSite) MH_bootstrap91 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap91 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper91 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call91 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap91 (Object l, Object n, Object t) throws Throwable { return _mh[ 91 ].invokeExact(l, n, t); }
+
+    // 92
+    private static MethodType MT_bootstrap92 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap92 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap92", MT_bootstrap92 ());
+    }
+
+    private static MethodHandle INDY_call92;
+    private static MethodHandle INDY_call92 () throws Throwable {
+        if (INDY_call92 != null) return INDY_call92;
+        CallSite cs = (CallSite) MH_bootstrap92 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap92 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper92 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call92 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap92 (Object l, Object n, Object t) throws Throwable { return _mh[ 92 ].invokeExact(l, n, t); }
+
+    // 93
+    private static MethodType MT_bootstrap93 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap93 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap93", MT_bootstrap93 ());
+    }
+
+    private static MethodHandle INDY_call93;
+    private static MethodHandle INDY_call93 () throws Throwable {
+        if (INDY_call93 != null) return INDY_call93;
+        CallSite cs = (CallSite) MH_bootstrap93 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap93 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper93 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call93 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap93 (Object l, Object n, Object t) throws Throwable { return _mh[ 93 ].invokeExact(l, n, t); }
+
+    // 94
+    private static MethodType MT_bootstrap94 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap94 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap94", MT_bootstrap94 ());
+    }
+
+    private static MethodHandle INDY_call94;
+    private static MethodHandle INDY_call94 () throws Throwable {
+        if (INDY_call94 != null) return INDY_call94;
+        CallSite cs = (CallSite) MH_bootstrap94 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap94 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper94 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call94 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap94 (Object l, Object n, Object t) throws Throwable { return _mh[ 94 ].invokeExact(l, n, t); }
+
+    // 95
+    private static MethodType MT_bootstrap95 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap95 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap95", MT_bootstrap95 ());
+    }
+
+    private static MethodHandle INDY_call95;
+    private static MethodHandle INDY_call95 () throws Throwable {
+        if (INDY_call95 != null) return INDY_call95;
+        CallSite cs = (CallSite) MH_bootstrap95 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap95 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper95 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call95 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap95 (Object l, Object n, Object t) throws Throwable { return _mh[ 95 ].invokeExact(l, n, t); }
+
+    // 96
+    private static MethodType MT_bootstrap96 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap96 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap96", MT_bootstrap96 ());
+    }
+
+    private static MethodHandle INDY_call96;
+    private static MethodHandle INDY_call96 () throws Throwable {
+        if (INDY_call96 != null) return INDY_call96;
+        CallSite cs = (CallSite) MH_bootstrap96 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap96 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper96 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call96 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap96 (Object l, Object n, Object t) throws Throwable { return _mh[ 96 ].invokeExact(l, n, t); }
+
+    // 97
+    private static MethodType MT_bootstrap97 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap97 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap97", MT_bootstrap97 ());
+    }
+
+    private static MethodHandle INDY_call97;
+    private static MethodHandle INDY_call97 () throws Throwable {
+        if (INDY_call97 != null) return INDY_call97;
+        CallSite cs = (CallSite) MH_bootstrap97 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap97 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper97 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call97 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap97 (Object l, Object n, Object t) throws Throwable { return _mh[ 97 ].invokeExact(l, n, t); }
+
+    // 98
+    private static MethodType MT_bootstrap98 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap98 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap98", MT_bootstrap98 ());
+    }
+
+    private static MethodHandle INDY_call98;
+    private static MethodHandle INDY_call98 () throws Throwable {
+        if (INDY_call98 != null) return INDY_call98;
+        CallSite cs = (CallSite) MH_bootstrap98 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap98 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper98 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call98 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap98 (Object l, Object n, Object t) throws Throwable { return _mh[ 98 ].invokeExact(l, n, t); }
+
+    // 99
+    private static MethodType MT_bootstrap99 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap99 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap99", MT_bootstrap99 ());
+    }
+
+    private static MethodHandle INDY_call99;
+    private static MethodHandle INDY_call99 () throws Throwable {
+        if (INDY_call99 != null) return INDY_call99;
+        CallSite cs = (CallSite) MH_bootstrap99 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap99 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper99 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call99 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap99 (Object l, Object n, Object t) throws Throwable { return _mh[ 99 ].invokeExact(l, n, t); }
+
+    // 100
+    private static MethodType MT_bootstrap100 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap100 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap100", MT_bootstrap100 ());
+    }
+
+    private static MethodHandle INDY_call100;
+    private static MethodHandle INDY_call100 () throws Throwable {
+        if (INDY_call100 != null) return INDY_call100;
+        CallSite cs = (CallSite) MH_bootstrap100 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap100 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper100 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call100 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap100 (Object l, Object n, Object t) throws Throwable { return _mh[ 100 ].invokeExact(l, n, t); }
+
+    // 101
+    private static MethodType MT_bootstrap101 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap101 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap101", MT_bootstrap101 ());
+    }
+
+    private static MethodHandle INDY_call101;
+    private static MethodHandle INDY_call101 () throws Throwable {
+        if (INDY_call101 != null) return INDY_call101;
+        CallSite cs = (CallSite) MH_bootstrap101 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap101 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper101 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call101 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap101 (Object l, Object n, Object t) throws Throwable { return _mh[ 101 ].invokeExact(l, n, t); }
+
+    // 102
+    private static MethodType MT_bootstrap102 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap102 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap102", MT_bootstrap102 ());
+    }
+
+    private static MethodHandle INDY_call102;
+    private static MethodHandle INDY_call102 () throws Throwable {
+        if (INDY_call102 != null) return INDY_call102;
+        CallSite cs = (CallSite) MH_bootstrap102 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap102 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper102 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call102 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap102 (Object l, Object n, Object t) throws Throwable { return _mh[ 102 ].invokeExact(l, n, t); }
+
+    // 103
+    private static MethodType MT_bootstrap103 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap103 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap103", MT_bootstrap103 ());
+    }
+
+    private static MethodHandle INDY_call103;
+    private static MethodHandle INDY_call103 () throws Throwable {
+        if (INDY_call103 != null) return INDY_call103;
+        CallSite cs = (CallSite) MH_bootstrap103 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap103 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper103 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call103 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap103 (Object l, Object n, Object t) throws Throwable { return _mh[ 103 ].invokeExact(l, n, t); }
+
+    // 104
+    private static MethodType MT_bootstrap104 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap104 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap104", MT_bootstrap104 ());
+    }
+
+    private static MethodHandle INDY_call104;
+    private static MethodHandle INDY_call104 () throws Throwable {
+        if (INDY_call104 != null) return INDY_call104;
+        CallSite cs = (CallSite) MH_bootstrap104 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap104 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper104 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call104 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap104 (Object l, Object n, Object t) throws Throwable { return _mh[ 104 ].invokeExact(l, n, t); }
+
+    // 105
+    private static MethodType MT_bootstrap105 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap105 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap105", MT_bootstrap105 ());
+    }
+
+    private static MethodHandle INDY_call105;
+    private static MethodHandle INDY_call105 () throws Throwable {
+        if (INDY_call105 != null) return INDY_call105;
+        CallSite cs = (CallSite) MH_bootstrap105 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap105 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper105 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call105 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap105 (Object l, Object n, Object t) throws Throwable { return _mh[ 105 ].invokeExact(l, n, t); }
+
+    // 106
+    private static MethodType MT_bootstrap106 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap106 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap106", MT_bootstrap106 ());
+    }
+
+    private static MethodHandle INDY_call106;
+    private static MethodHandle INDY_call106 () throws Throwable {
+        if (INDY_call106 != null) return INDY_call106;
+        CallSite cs = (CallSite) MH_bootstrap106 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap106 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper106 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call106 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap106 (Object l, Object n, Object t) throws Throwable { return _mh[ 106 ].invokeExact(l, n, t); }
+
+    // 107
+    private static MethodType MT_bootstrap107 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap107 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap107", MT_bootstrap107 ());
+    }
+
+    private static MethodHandle INDY_call107;
+    private static MethodHandle INDY_call107 () throws Throwable {
+        if (INDY_call107 != null) return INDY_call107;
+        CallSite cs = (CallSite) MH_bootstrap107 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap107 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper107 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call107 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap107 (Object l, Object n, Object t) throws Throwable { return _mh[ 107 ].invokeExact(l, n, t); }
+
+    // 108
+    private static MethodType MT_bootstrap108 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap108 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap108", MT_bootstrap108 ());
+    }
+
+    private static MethodHandle INDY_call108;
+    private static MethodHandle INDY_call108 () throws Throwable {
+        if (INDY_call108 != null) return INDY_call108;
+        CallSite cs = (CallSite) MH_bootstrap108 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap108 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper108 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call108 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap108 (Object l, Object n, Object t) throws Throwable { return _mh[ 108 ].invokeExact(l, n, t); }
+
+    // 109
+    private static MethodType MT_bootstrap109 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap109 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap109", MT_bootstrap109 ());
+    }
+
+    private static MethodHandle INDY_call109;
+    private static MethodHandle INDY_call109 () throws Throwable {
+        if (INDY_call109 != null) return INDY_call109;
+        CallSite cs = (CallSite) MH_bootstrap109 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap109 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper109 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call109 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap109 (Object l, Object n, Object t) throws Throwable { return _mh[ 109 ].invokeExact(l, n, t); }
+
+    // 110
+    private static MethodType MT_bootstrap110 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap110 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap110", MT_bootstrap110 ());
+    }
+
+    private static MethodHandle INDY_call110;
+    private static MethodHandle INDY_call110 () throws Throwable {
+        if (INDY_call110 != null) return INDY_call110;
+        CallSite cs = (CallSite) MH_bootstrap110 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap110 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper110 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call110 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap110 (Object l, Object n, Object t) throws Throwable { return _mh[ 110 ].invokeExact(l, n, t); }
+
+    // 111
+    private static MethodType MT_bootstrap111 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap111 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap111", MT_bootstrap111 ());
+    }
+
+    private static MethodHandle INDY_call111;
+    private static MethodHandle INDY_call111 () throws Throwable {
+        if (INDY_call111 != null) return INDY_call111;
+        CallSite cs = (CallSite) MH_bootstrap111 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap111 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper111 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call111 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap111 (Object l, Object n, Object t) throws Throwable { return _mh[ 111 ].invokeExact(l, n, t); }
+
+    // 112
+    private static MethodType MT_bootstrap112 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap112 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap112", MT_bootstrap112 ());
+    }
+
+    private static MethodHandle INDY_call112;
+    private static MethodHandle INDY_call112 () throws Throwable {
+        if (INDY_call112 != null) return INDY_call112;
+        CallSite cs = (CallSite) MH_bootstrap112 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap112 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper112 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call112 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap112 (Object l, Object n, Object t) throws Throwable { return _mh[ 112 ].invokeExact(l, n, t); }
+
+    // 113
+    private static MethodType MT_bootstrap113 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap113 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap113", MT_bootstrap113 ());
+    }
+
+    private static MethodHandle INDY_call113;
+    private static MethodHandle INDY_call113 () throws Throwable {
+        if (INDY_call113 != null) return INDY_call113;
+        CallSite cs = (CallSite) MH_bootstrap113 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap113 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper113 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call113 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap113 (Object l, Object n, Object t) throws Throwable { return _mh[ 113 ].invokeExact(l, n, t); }
+
+    // 114
+    private static MethodType MT_bootstrap114 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap114 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap114", MT_bootstrap114 ());
+    }
+
+    private static MethodHandle INDY_call114;
+    private static MethodHandle INDY_call114 () throws Throwable {
+        if (INDY_call114 != null) return INDY_call114;
+        CallSite cs = (CallSite) MH_bootstrap114 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap114 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper114 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call114 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap114 (Object l, Object n, Object t) throws Throwable { return _mh[ 114 ].invokeExact(l, n, t); }
+
+    // 115
+    private static MethodType MT_bootstrap115 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap115 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap115", MT_bootstrap115 ());
+    }
+
+    private static MethodHandle INDY_call115;
+    private static MethodHandle INDY_call115 () throws Throwable {
+        if (INDY_call115 != null) return INDY_call115;
+        CallSite cs = (CallSite) MH_bootstrap115 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap115 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper115 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call115 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap115 (Object l, Object n, Object t) throws Throwable { return _mh[ 115 ].invokeExact(l, n, t); }
+
+    // 116
+    private static MethodType MT_bootstrap116 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap116 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap116", MT_bootstrap116 ());
+    }
+
+    private static MethodHandle INDY_call116;
+    private static MethodHandle INDY_call116 () throws Throwable {
+        if (INDY_call116 != null) return INDY_call116;
+        CallSite cs = (CallSite) MH_bootstrap116 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap116 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper116 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call116 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap116 (Object l, Object n, Object t) throws Throwable { return _mh[ 116 ].invokeExact(l, n, t); }
+
+    // 117
+    private static MethodType MT_bootstrap117 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap117 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap117", MT_bootstrap117 ());
+    }
+
+    private static MethodHandle INDY_call117;
+    private static MethodHandle INDY_call117 () throws Throwable {
+        if (INDY_call117 != null) return INDY_call117;
+        CallSite cs = (CallSite) MH_bootstrap117 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap117 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper117 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call117 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap117 (Object l, Object n, Object t) throws Throwable { return _mh[ 117 ].invokeExact(l, n, t); }
+
+    // 118
+    private static MethodType MT_bootstrap118 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap118 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap118", MT_bootstrap118 ());
+    }
+
+    private static MethodHandle INDY_call118;
+    private static MethodHandle INDY_call118 () throws Throwable {
+        if (INDY_call118 != null) return INDY_call118;
+        CallSite cs = (CallSite) MH_bootstrap118 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap118 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper118 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call118 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap118 (Object l, Object n, Object t) throws Throwable { return _mh[ 118 ].invokeExact(l, n, t); }
+
+    // 119
+    private static MethodType MT_bootstrap119 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap119 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap119", MT_bootstrap119 ());
+    }
+
+    private static MethodHandle INDY_call119;
+    private static MethodHandle INDY_call119 () throws Throwable {
+        if (INDY_call119 != null) return INDY_call119;
+        CallSite cs = (CallSite) MH_bootstrap119 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap119 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper119 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call119 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap119 (Object l, Object n, Object t) throws Throwable { return _mh[ 119 ].invokeExact(l, n, t); }
+
+    // 120
+    private static MethodType MT_bootstrap120 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap120 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap120", MT_bootstrap120 ());
+    }
+
+    private static MethodHandle INDY_call120;
+    private static MethodHandle INDY_call120 () throws Throwable {
+        if (INDY_call120 != null) return INDY_call120;
+        CallSite cs = (CallSite) MH_bootstrap120 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap120 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper120 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call120 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap120 (Object l, Object n, Object t) throws Throwable { return _mh[ 120 ].invokeExact(l, n, t); }
+
+    // 121
+    private static MethodType MT_bootstrap121 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap121 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap121", MT_bootstrap121 ());
+    }
+
+    private static MethodHandle INDY_call121;
+    private static MethodHandle INDY_call121 () throws Throwable {
+        if (INDY_call121 != null) return INDY_call121;
+        CallSite cs = (CallSite) MH_bootstrap121 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap121 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper121 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call121 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap121 (Object l, Object n, Object t) throws Throwable { return _mh[ 121 ].invokeExact(l, n, t); }
+
+    // 122
+    private static MethodType MT_bootstrap122 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap122 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap122", MT_bootstrap122 ());
+    }
+
+    private static MethodHandle INDY_call122;
+    private static MethodHandle INDY_call122 () throws Throwable {
+        if (INDY_call122 != null) return INDY_call122;
+        CallSite cs = (CallSite) MH_bootstrap122 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap122 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper122 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call122 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap122 (Object l, Object n, Object t) throws Throwable { return _mh[ 122 ].invokeExact(l, n, t); }
+
+    // 123
+    private static MethodType MT_bootstrap123 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap123 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap123", MT_bootstrap123 ());
+    }
+
+    private static MethodHandle INDY_call123;
+    private static MethodHandle INDY_call123 () throws Throwable {
+        if (INDY_call123 != null) return INDY_call123;
+        CallSite cs = (CallSite) MH_bootstrap123 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap123 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper123 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call123 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap123 (Object l, Object n, Object t) throws Throwable { return _mh[ 123 ].invokeExact(l, n, t); }
+
+    // 124
+    private static MethodType MT_bootstrap124 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap124 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap124", MT_bootstrap124 ());
+    }
+
+    private static MethodHandle INDY_call124;
+    private static MethodHandle INDY_call124 () throws Throwable {
+        if (INDY_call124 != null) return INDY_call124;
+        CallSite cs = (CallSite) MH_bootstrap124 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap124 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper124 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call124 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap124 (Object l, Object n, Object t) throws Throwable { return _mh[ 124 ].invokeExact(l, n, t); }
+
+    // 125
+    private static MethodType MT_bootstrap125 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap125 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap125", MT_bootstrap125 ());
+    }
+
+    private static MethodHandle INDY_call125;
+    private static MethodHandle INDY_call125 () throws Throwable {
+        if (INDY_call125 != null) return INDY_call125;
+        CallSite cs = (CallSite) MH_bootstrap125 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap125 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper125 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call125 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap125 (Object l, Object n, Object t) throws Throwable { return _mh[ 125 ].invokeExact(l, n, t); }
+
+    // 126
+    private static MethodType MT_bootstrap126 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap126 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap126", MT_bootstrap126 ());
+    }
+
+    private static MethodHandle INDY_call126;
+    private static MethodHandle INDY_call126 () throws Throwable {
+        if (INDY_call126 != null) return INDY_call126;
+        CallSite cs = (CallSite) MH_bootstrap126 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap126 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper126 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call126 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap126 (Object l, Object n, Object t) throws Throwable { return _mh[ 126 ].invokeExact(l, n, t); }
+
+    // 127
+    private static MethodType MT_bootstrap127 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap127 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap127", MT_bootstrap127 ());
+    }
+
+    private static MethodHandle INDY_call127;
+    private static MethodHandle INDY_call127 () throws Throwable {
+        if (INDY_call127 != null) return INDY_call127;
+        CallSite cs = (CallSite) MH_bootstrap127 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap127 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper127 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call127 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap127 (Object l, Object n, Object t) throws Throwable { return _mh[ 127 ].invokeExact(l, n, t); }
+
+    // 128
+    private static MethodType MT_bootstrap128 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap128 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap128", MT_bootstrap128 ());
+    }
+
+    private static MethodHandle INDY_call128;
+    private static MethodHandle INDY_call128 () throws Throwable {
+        if (INDY_call128 != null) return INDY_call128;
+        CallSite cs = (CallSite) MH_bootstrap128 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap128 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper128 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call128 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap128 (Object l, Object n, Object t) throws Throwable { return _mh[ 128 ].invokeExact(l, n, t); }
+
+    // 129
+    private static MethodType MT_bootstrap129 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap129 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap129", MT_bootstrap129 ());
+    }
+
+    private static MethodHandle INDY_call129;
+    private static MethodHandle INDY_call129 () throws Throwable {
+        if (INDY_call129 != null) return INDY_call129;
+        CallSite cs = (CallSite) MH_bootstrap129 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap129 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper129 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call129 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap129 (Object l, Object n, Object t) throws Throwable { return _mh[ 129 ].invokeExact(l, n, t); }
+
+    // 130
+    private static MethodType MT_bootstrap130 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap130 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap130", MT_bootstrap130 ());
+    }
+
+    private static MethodHandle INDY_call130;
+    private static MethodHandle INDY_call130 () throws Throwable {
+        if (INDY_call130 != null) return INDY_call130;
+        CallSite cs = (CallSite) MH_bootstrap130 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap130 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper130 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call130 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap130 (Object l, Object n, Object t) throws Throwable { return _mh[ 130 ].invokeExact(l, n, t); }
+
+    // 131
+    private static MethodType MT_bootstrap131 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap131 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap131", MT_bootstrap131 ());
+    }
+
+    private static MethodHandle INDY_call131;
+    private static MethodHandle INDY_call131 () throws Throwable {
+        if (INDY_call131 != null) return INDY_call131;
+        CallSite cs = (CallSite) MH_bootstrap131 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap131 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper131 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call131 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap131 (Object l, Object n, Object t) throws Throwable { return _mh[ 131 ].invokeExact(l, n, t); }
+
+    // 132
+    private static MethodType MT_bootstrap132 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap132 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap132", MT_bootstrap132 ());
+    }
+
+    private static MethodHandle INDY_call132;
+    private static MethodHandle INDY_call132 () throws Throwable {
+        if (INDY_call132 != null) return INDY_call132;
+        CallSite cs = (CallSite) MH_bootstrap132 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap132 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper132 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call132 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap132 (Object l, Object n, Object t) throws Throwable { return _mh[ 132 ].invokeExact(l, n, t); }
+
+    // 133
+    private static MethodType MT_bootstrap133 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap133 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap133", MT_bootstrap133 ());
+    }
+
+    private static MethodHandle INDY_call133;
+    private static MethodHandle INDY_call133 () throws Throwable {
+        if (INDY_call133 != null) return INDY_call133;
+        CallSite cs = (CallSite) MH_bootstrap133 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap133 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper133 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call133 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap133 (Object l, Object n, Object t) throws Throwable { return _mh[ 133 ].invokeExact(l, n, t); }
+
+    // 134
+    private static MethodType MT_bootstrap134 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap134 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap134", MT_bootstrap134 ());
+    }
+
+    private static MethodHandle INDY_call134;
+    private static MethodHandle INDY_call134 () throws Throwable {
+        if (INDY_call134 != null) return INDY_call134;
+        CallSite cs = (CallSite) MH_bootstrap134 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap134 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper134 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call134 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap134 (Object l, Object n, Object t) throws Throwable { return _mh[ 134 ].invokeExact(l, n, t); }
+
+    // 135
+    private static MethodType MT_bootstrap135 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap135 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap135", MT_bootstrap135 ());
+    }
+
+    private static MethodHandle INDY_call135;
+    private static MethodHandle INDY_call135 () throws Throwable {
+        if (INDY_call135 != null) return INDY_call135;
+        CallSite cs = (CallSite) MH_bootstrap135 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap135 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper135 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call135 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap135 (Object l, Object n, Object t) throws Throwable { return _mh[ 135 ].invokeExact(l, n, t); }
+
+    // 136
+    private static MethodType MT_bootstrap136 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap136 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap136", MT_bootstrap136 ());
+    }
+
+    private static MethodHandle INDY_call136;
+    private static MethodHandle INDY_call136 () throws Throwable {
+        if (INDY_call136 != null) return INDY_call136;
+        CallSite cs = (CallSite) MH_bootstrap136 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap136 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper136 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call136 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap136 (Object l, Object n, Object t) throws Throwable { return _mh[ 136 ].invokeExact(l, n, t); }
+
+    // 137
+    private static MethodType MT_bootstrap137 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap137 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap137", MT_bootstrap137 ());
+    }
+
+    private static MethodHandle INDY_call137;
+    private static MethodHandle INDY_call137 () throws Throwable {
+        if (INDY_call137 != null) return INDY_call137;
+        CallSite cs = (CallSite) MH_bootstrap137 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap137 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper137 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call137 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap137 (Object l, Object n, Object t) throws Throwable { return _mh[ 137 ].invokeExact(l, n, t); }
+
+    // 138
+    private static MethodType MT_bootstrap138 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap138 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap138", MT_bootstrap138 ());
+    }
+
+    private static MethodHandle INDY_call138;
+    private static MethodHandle INDY_call138 () throws Throwable {
+        if (INDY_call138 != null) return INDY_call138;
+        CallSite cs = (CallSite) MH_bootstrap138 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap138 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper138 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call138 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap138 (Object l, Object n, Object t) throws Throwable { return _mh[ 138 ].invokeExact(l, n, t); }
+
+    // 139
+    private static MethodType MT_bootstrap139 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap139 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap139", MT_bootstrap139 ());
+    }
+
+    private static MethodHandle INDY_call139;
+    private static MethodHandle INDY_call139 () throws Throwable {
+        if (INDY_call139 != null) return INDY_call139;
+        CallSite cs = (CallSite) MH_bootstrap139 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap139 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper139 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call139 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap139 (Object l, Object n, Object t) throws Throwable { return _mh[ 139 ].invokeExact(l, n, t); }
+
+    // 140
+    private static MethodType MT_bootstrap140 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap140 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap140", MT_bootstrap140 ());
+    }
+
+    private static MethodHandle INDY_call140;
+    private static MethodHandle INDY_call140 () throws Throwable {
+        if (INDY_call140 != null) return INDY_call140;
+        CallSite cs = (CallSite) MH_bootstrap140 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap140 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper140 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call140 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap140 (Object l, Object n, Object t) throws Throwable { return _mh[ 140 ].invokeExact(l, n, t); }
+
+    // 141
+    private static MethodType MT_bootstrap141 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap141 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap141", MT_bootstrap141 ());
+    }
+
+    private static MethodHandle INDY_call141;
+    private static MethodHandle INDY_call141 () throws Throwable {
+        if (INDY_call141 != null) return INDY_call141;
+        CallSite cs = (CallSite) MH_bootstrap141 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap141 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper141 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call141 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap141 (Object l, Object n, Object t) throws Throwable { return _mh[ 141 ].invokeExact(l, n, t); }
+
+    // 142
+    private static MethodType MT_bootstrap142 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap142 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap142", MT_bootstrap142 ());
+    }
+
+    private static MethodHandle INDY_call142;
+    private static MethodHandle INDY_call142 () throws Throwable {
+        if (INDY_call142 != null) return INDY_call142;
+        CallSite cs = (CallSite) MH_bootstrap142 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap142 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper142 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call142 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap142 (Object l, Object n, Object t) throws Throwable { return _mh[ 142 ].invokeExact(l, n, t); }
+
+    // 143
+    private static MethodType MT_bootstrap143 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap143 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap143", MT_bootstrap143 ());
+    }
+
+    private static MethodHandle INDY_call143;
+    private static MethodHandle INDY_call143 () throws Throwable {
+        if (INDY_call143 != null) return INDY_call143;
+        CallSite cs = (CallSite) MH_bootstrap143 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap143 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper143 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call143 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap143 (Object l, Object n, Object t) throws Throwable { return _mh[ 143 ].invokeExact(l, n, t); }
+
+    // 144
+    private static MethodType MT_bootstrap144 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap144 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap144", MT_bootstrap144 ());
+    }
+
+    private static MethodHandle INDY_call144;
+    private static MethodHandle INDY_call144 () throws Throwable {
+        if (INDY_call144 != null) return INDY_call144;
+        CallSite cs = (CallSite) MH_bootstrap144 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap144 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper144 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call144 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap144 (Object l, Object n, Object t) throws Throwable { return _mh[ 144 ].invokeExact(l, n, t); }
+
+    // 145
+    private static MethodType MT_bootstrap145 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap145 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap145", MT_bootstrap145 ());
+    }
+
+    private static MethodHandle INDY_call145;
+    private static MethodHandle INDY_call145 () throws Throwable {
+        if (INDY_call145 != null) return INDY_call145;
+        CallSite cs = (CallSite) MH_bootstrap145 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap145 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper145 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call145 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap145 (Object l, Object n, Object t) throws Throwable { return _mh[ 145 ].invokeExact(l, n, t); }
+
+    // 146
+    private static MethodType MT_bootstrap146 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap146 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap146", MT_bootstrap146 ());
+    }
+
+    private static MethodHandle INDY_call146;
+    private static MethodHandle INDY_call146 () throws Throwable {
+        if (INDY_call146 != null) return INDY_call146;
+        CallSite cs = (CallSite) MH_bootstrap146 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap146 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper146 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call146 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap146 (Object l, Object n, Object t) throws Throwable { return _mh[ 146 ].invokeExact(l, n, t); }
+
+    // 147
+    private static MethodType MT_bootstrap147 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap147 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap147", MT_bootstrap147 ());
+    }
+
+    private static MethodHandle INDY_call147;
+    private static MethodHandle INDY_call147 () throws Throwable {
+        if (INDY_call147 != null) return INDY_call147;
+        CallSite cs = (CallSite) MH_bootstrap147 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap147 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper147 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call147 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap147 (Object l, Object n, Object t) throws Throwable { return _mh[ 147 ].invokeExact(l, n, t); }
+
+    // 148
+    private static MethodType MT_bootstrap148 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap148 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap148", MT_bootstrap148 ());
+    }
+
+    private static MethodHandle INDY_call148;
+    private static MethodHandle INDY_call148 () throws Throwable {
+        if (INDY_call148 != null) return INDY_call148;
+        CallSite cs = (CallSite) MH_bootstrap148 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap148 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper148 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call148 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap148 (Object l, Object n, Object t) throws Throwable { return _mh[ 148 ].invokeExact(l, n, t); }
+
+    // 149
+    private static MethodType MT_bootstrap149 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap149 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap149", MT_bootstrap149 ());
+    }
+
+    private static MethodHandle INDY_call149;
+    private static MethodHandle INDY_call149 () throws Throwable {
+        if (INDY_call149 != null) return INDY_call149;
+        CallSite cs = (CallSite) MH_bootstrap149 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap149 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper149 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call149 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap149 (Object l, Object n, Object t) throws Throwable { return _mh[ 149 ].invokeExact(l, n, t); }
+
+    // 150
+    private static MethodType MT_bootstrap150 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap150 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap150", MT_bootstrap150 ());
+    }
+
+    private static MethodHandle INDY_call150;
+    private static MethodHandle INDY_call150 () throws Throwable {
+        if (INDY_call150 != null) return INDY_call150;
+        CallSite cs = (CallSite) MH_bootstrap150 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap150 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper150 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call150 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap150 (Object l, Object n, Object t) throws Throwable { return _mh[ 150 ].invokeExact(l, n, t); }
+
+    // 151
+    private static MethodType MT_bootstrap151 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap151 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap151", MT_bootstrap151 ());
+    }
+
+    private static MethodHandle INDY_call151;
+    private static MethodHandle INDY_call151 () throws Throwable {
+        if (INDY_call151 != null) return INDY_call151;
+        CallSite cs = (CallSite) MH_bootstrap151 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap151 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper151 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call151 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap151 (Object l, Object n, Object t) throws Throwable { return _mh[ 151 ].invokeExact(l, n, t); }
+
+    // 152
+    private static MethodType MT_bootstrap152 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap152 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap152", MT_bootstrap152 ());
+    }
+
+    private static MethodHandle INDY_call152;
+    private static MethodHandle INDY_call152 () throws Throwable {
+        if (INDY_call152 != null) return INDY_call152;
+        CallSite cs = (CallSite) MH_bootstrap152 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap152 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper152 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call152 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap152 (Object l, Object n, Object t) throws Throwable { return _mh[ 152 ].invokeExact(l, n, t); }
+
+    // 153
+    private static MethodType MT_bootstrap153 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap153 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap153", MT_bootstrap153 ());
+    }
+
+    private static MethodHandle INDY_call153;
+    private static MethodHandle INDY_call153 () throws Throwable {
+        if (INDY_call153 != null) return INDY_call153;
+        CallSite cs = (CallSite) MH_bootstrap153 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap153 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper153 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call153 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap153 (Object l, Object n, Object t) throws Throwable { return _mh[ 153 ].invokeExact(l, n, t); }
+
+    // 154
+    private static MethodType MT_bootstrap154 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap154 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap154", MT_bootstrap154 ());
+    }
+
+    private static MethodHandle INDY_call154;
+    private static MethodHandle INDY_call154 () throws Throwable {
+        if (INDY_call154 != null) return INDY_call154;
+        CallSite cs = (CallSite) MH_bootstrap154 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap154 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper154 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call154 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap154 (Object l, Object n, Object t) throws Throwable { return _mh[ 154 ].invokeExact(l, n, t); }
+
+    // 155
+    private static MethodType MT_bootstrap155 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap155 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap155", MT_bootstrap155 ());
+    }
+
+    private static MethodHandle INDY_call155;
+    private static MethodHandle INDY_call155 () throws Throwable {
+        if (INDY_call155 != null) return INDY_call155;
+        CallSite cs = (CallSite) MH_bootstrap155 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap155 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper155 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call155 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap155 (Object l, Object n, Object t) throws Throwable { return _mh[ 155 ].invokeExact(l, n, t); }
+
+    // 156
+    private static MethodType MT_bootstrap156 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap156 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap156", MT_bootstrap156 ());
+    }
+
+    private static MethodHandle INDY_call156;
+    private static MethodHandle INDY_call156 () throws Throwable {
+        if (INDY_call156 != null) return INDY_call156;
+        CallSite cs = (CallSite) MH_bootstrap156 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap156 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper156 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call156 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap156 (Object l, Object n, Object t) throws Throwable { return _mh[ 156 ].invokeExact(l, n, t); }
+
+    // 157
+    private static MethodType MT_bootstrap157 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap157 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap157", MT_bootstrap157 ());
+    }
+
+    private static MethodHandle INDY_call157;
+    private static MethodHandle INDY_call157 () throws Throwable {
+        if (INDY_call157 != null) return INDY_call157;
+        CallSite cs = (CallSite) MH_bootstrap157 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap157 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper157 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call157 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap157 (Object l, Object n, Object t) throws Throwable { return _mh[ 157 ].invokeExact(l, n, t); }
+
+    // 158
+    private static MethodType MT_bootstrap158 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap158 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap158", MT_bootstrap158 ());
+    }
+
+    private static MethodHandle INDY_call158;
+    private static MethodHandle INDY_call158 () throws Throwable {
+        if (INDY_call158 != null) return INDY_call158;
+        CallSite cs = (CallSite) MH_bootstrap158 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap158 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper158 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call158 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap158 (Object l, Object n, Object t) throws Throwable { return _mh[ 158 ].invokeExact(l, n, t); }
+
+    // 159
+    private static MethodType MT_bootstrap159 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap159 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap159", MT_bootstrap159 ());
+    }
+
+    private static MethodHandle INDY_call159;
+    private static MethodHandle INDY_call159 () throws Throwable {
+        if (INDY_call159 != null) return INDY_call159;
+        CallSite cs = (CallSite) MH_bootstrap159 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap159 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper159 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call159 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap159 (Object l, Object n, Object t) throws Throwable { return _mh[ 159 ].invokeExact(l, n, t); }
+
+    // 160
+    private static MethodType MT_bootstrap160 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap160 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap160", MT_bootstrap160 ());
+    }
+
+    private static MethodHandle INDY_call160;
+    private static MethodHandle INDY_call160 () throws Throwable {
+        if (INDY_call160 != null) return INDY_call160;
+        CallSite cs = (CallSite) MH_bootstrap160 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap160 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper160 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call160 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap160 (Object l, Object n, Object t) throws Throwable { return _mh[ 160 ].invokeExact(l, n, t); }
+
+    // 161
+    private static MethodType MT_bootstrap161 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap161 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap161", MT_bootstrap161 ());
+    }
+
+    private static MethodHandle INDY_call161;
+    private static MethodHandle INDY_call161 () throws Throwable {
+        if (INDY_call161 != null) return INDY_call161;
+        CallSite cs = (CallSite) MH_bootstrap161 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap161 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper161 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call161 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap161 (Object l, Object n, Object t) throws Throwable { return _mh[ 161 ].invokeExact(l, n, t); }
+
+    // 162
+    private static MethodType MT_bootstrap162 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap162 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap162", MT_bootstrap162 ());
+    }
+
+    private static MethodHandle INDY_call162;
+    private static MethodHandle INDY_call162 () throws Throwable {
+        if (INDY_call162 != null) return INDY_call162;
+        CallSite cs = (CallSite) MH_bootstrap162 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap162 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper162 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call162 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap162 (Object l, Object n, Object t) throws Throwable { return _mh[ 162 ].invokeExact(l, n, t); }
+
+    // 163
+    private static MethodType MT_bootstrap163 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap163 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap163", MT_bootstrap163 ());
+    }
+
+    private static MethodHandle INDY_call163;
+    private static MethodHandle INDY_call163 () throws Throwable {
+        if (INDY_call163 != null) return INDY_call163;
+        CallSite cs = (CallSite) MH_bootstrap163 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap163 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper163 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call163 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap163 (Object l, Object n, Object t) throws Throwable { return _mh[ 163 ].invokeExact(l, n, t); }
+
+    // 164
+    private static MethodType MT_bootstrap164 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap164 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap164", MT_bootstrap164 ());
+    }
+
+    private static MethodHandle INDY_call164;
+    private static MethodHandle INDY_call164 () throws Throwable {
+        if (INDY_call164 != null) return INDY_call164;
+        CallSite cs = (CallSite) MH_bootstrap164 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap164 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper164 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call164 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap164 (Object l, Object n, Object t) throws Throwable { return _mh[ 164 ].invokeExact(l, n, t); }
+
+    // 165
+    private static MethodType MT_bootstrap165 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap165 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap165", MT_bootstrap165 ());
+    }
+
+    private static MethodHandle INDY_call165;
+    private static MethodHandle INDY_call165 () throws Throwable {
+        if (INDY_call165 != null) return INDY_call165;
+        CallSite cs = (CallSite) MH_bootstrap165 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap165 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper165 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call165 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap165 (Object l, Object n, Object t) throws Throwable { return _mh[ 165 ].invokeExact(l, n, t); }
+
+    // 166
+    private static MethodType MT_bootstrap166 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap166 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap166", MT_bootstrap166 ());
+    }
+
+    private static MethodHandle INDY_call166;
+    private static MethodHandle INDY_call166 () throws Throwable {
+        if (INDY_call166 != null) return INDY_call166;
+        CallSite cs = (CallSite) MH_bootstrap166 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap166 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper166 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call166 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap166 (Object l, Object n, Object t) throws Throwable { return _mh[ 166 ].invokeExact(l, n, t); }
+
+    // 167
+    private static MethodType MT_bootstrap167 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap167 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap167", MT_bootstrap167 ());
+    }
+
+    private static MethodHandle INDY_call167;
+    private static MethodHandle INDY_call167 () throws Throwable {
+        if (INDY_call167 != null) return INDY_call167;
+        CallSite cs = (CallSite) MH_bootstrap167 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap167 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper167 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call167 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap167 (Object l, Object n, Object t) throws Throwable { return _mh[ 167 ].invokeExact(l, n, t); }
+
+    // 168
+    private static MethodType MT_bootstrap168 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap168 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap168", MT_bootstrap168 ());
+    }
+
+    private static MethodHandle INDY_call168;
+    private static MethodHandle INDY_call168 () throws Throwable {
+        if (INDY_call168 != null) return INDY_call168;
+        CallSite cs = (CallSite) MH_bootstrap168 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap168 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper168 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call168 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap168 (Object l, Object n, Object t) throws Throwable { return _mh[ 168 ].invokeExact(l, n, t); }
+
+    // 169
+    private static MethodType MT_bootstrap169 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap169 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap169", MT_bootstrap169 ());
+    }
+
+    private static MethodHandle INDY_call169;
+    private static MethodHandle INDY_call169 () throws Throwable {
+        if (INDY_call169 != null) return INDY_call169;
+        CallSite cs = (CallSite) MH_bootstrap169 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap169 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper169 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call169 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap169 (Object l, Object n, Object t) throws Throwable { return _mh[ 169 ].invokeExact(l, n, t); }
+
+    // 170
+    private static MethodType MT_bootstrap170 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap170 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap170", MT_bootstrap170 ());
+    }
+
+    private static MethodHandle INDY_call170;
+    private static MethodHandle INDY_call170 () throws Throwable {
+        if (INDY_call170 != null) return INDY_call170;
+        CallSite cs = (CallSite) MH_bootstrap170 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap170 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper170 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call170 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap170 (Object l, Object n, Object t) throws Throwable { return _mh[ 170 ].invokeExact(l, n, t); }
+
+    // 171
+    private static MethodType MT_bootstrap171 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap171 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap171", MT_bootstrap171 ());
+    }
+
+    private static MethodHandle INDY_call171;
+    private static MethodHandle INDY_call171 () throws Throwable {
+        if (INDY_call171 != null) return INDY_call171;
+        CallSite cs = (CallSite) MH_bootstrap171 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap171 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper171 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call171 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap171 (Object l, Object n, Object t) throws Throwable { return _mh[ 171 ].invokeExact(l, n, t); }
+
+    // 172
+    private static MethodType MT_bootstrap172 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap172 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap172", MT_bootstrap172 ());
+    }
+
+    private static MethodHandle INDY_call172;
+    private static MethodHandle INDY_call172 () throws Throwable {
+        if (INDY_call172 != null) return INDY_call172;
+        CallSite cs = (CallSite) MH_bootstrap172 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap172 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper172 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call172 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap172 (Object l, Object n, Object t) throws Throwable { return _mh[ 172 ].invokeExact(l, n, t); }
+
+    // 173
+    private static MethodType MT_bootstrap173 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap173 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap173", MT_bootstrap173 ());
+    }
+
+    private static MethodHandle INDY_call173;
+    private static MethodHandle INDY_call173 () throws Throwable {
+        if (INDY_call173 != null) return INDY_call173;
+        CallSite cs = (CallSite) MH_bootstrap173 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap173 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper173 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call173 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap173 (Object l, Object n, Object t) throws Throwable { return _mh[ 173 ].invokeExact(l, n, t); }
+
+    // 174
+    private static MethodType MT_bootstrap174 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap174 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap174", MT_bootstrap174 ());
+    }
+
+    private static MethodHandle INDY_call174;
+    private static MethodHandle INDY_call174 () throws Throwable {
+        if (INDY_call174 != null) return INDY_call174;
+        CallSite cs = (CallSite) MH_bootstrap174 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap174 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper174 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call174 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap174 (Object l, Object n, Object t) throws Throwable { return _mh[ 174 ].invokeExact(l, n, t); }
+
+    // 175
+    private static MethodType MT_bootstrap175 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap175 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap175", MT_bootstrap175 ());
+    }
+
+    private static MethodHandle INDY_call175;
+    private static MethodHandle INDY_call175 () throws Throwable {
+        if (INDY_call175 != null) return INDY_call175;
+        CallSite cs = (CallSite) MH_bootstrap175 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap175 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper175 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call175 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap175 (Object l, Object n, Object t) throws Throwable { return _mh[ 175 ].invokeExact(l, n, t); }
+
+    // 176
+    private static MethodType MT_bootstrap176 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap176 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap176", MT_bootstrap176 ());
+    }
+
+    private static MethodHandle INDY_call176;
+    private static MethodHandle INDY_call176 () throws Throwable {
+        if (INDY_call176 != null) return INDY_call176;
+        CallSite cs = (CallSite) MH_bootstrap176 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap176 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper176 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call176 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap176 (Object l, Object n, Object t) throws Throwable { return _mh[ 176 ].invokeExact(l, n, t); }
+
+    // 177
+    private static MethodType MT_bootstrap177 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap177 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap177", MT_bootstrap177 ());
+    }
+
+    private static MethodHandle INDY_call177;
+    private static MethodHandle INDY_call177 () throws Throwable {
+        if (INDY_call177 != null) return INDY_call177;
+        CallSite cs = (CallSite) MH_bootstrap177 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap177 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper177 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call177 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap177 (Object l, Object n, Object t) throws Throwable { return _mh[ 177 ].invokeExact(l, n, t); }
+
+    // 178
+    private static MethodType MT_bootstrap178 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap178 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap178", MT_bootstrap178 ());
+    }
+
+    private static MethodHandle INDY_call178;
+    private static MethodHandle INDY_call178 () throws Throwable {
+        if (INDY_call178 != null) return INDY_call178;
+        CallSite cs = (CallSite) MH_bootstrap178 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap178 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper178 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call178 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap178 (Object l, Object n, Object t) throws Throwable { return _mh[ 178 ].invokeExact(l, n, t); }
+
+    // 179
+    private static MethodType MT_bootstrap179 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap179 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap179", MT_bootstrap179 ());
+    }
+
+    private static MethodHandle INDY_call179;
+    private static MethodHandle INDY_call179 () throws Throwable {
+        if (INDY_call179 != null) return INDY_call179;
+        CallSite cs = (CallSite) MH_bootstrap179 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap179 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper179 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call179 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap179 (Object l, Object n, Object t) throws Throwable { return _mh[ 179 ].invokeExact(l, n, t); }
+
+    // 180
+    private static MethodType MT_bootstrap180 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap180 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap180", MT_bootstrap180 ());
+    }
+
+    private static MethodHandle INDY_call180;
+    private static MethodHandle INDY_call180 () throws Throwable {
+        if (INDY_call180 != null) return INDY_call180;
+        CallSite cs = (CallSite) MH_bootstrap180 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap180 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper180 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call180 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap180 (Object l, Object n, Object t) throws Throwable { return _mh[ 180 ].invokeExact(l, n, t); }
+
+    // 181
+    private static MethodType MT_bootstrap181 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap181 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap181", MT_bootstrap181 ());
+    }
+
+    private static MethodHandle INDY_call181;
+    private static MethodHandle INDY_call181 () throws Throwable {
+        if (INDY_call181 != null) return INDY_call181;
+        CallSite cs = (CallSite) MH_bootstrap181 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap181 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper181 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call181 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap181 (Object l, Object n, Object t) throws Throwable { return _mh[ 181 ].invokeExact(l, n, t); }
+
+    // 182
+    private static MethodType MT_bootstrap182 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap182 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap182", MT_bootstrap182 ());
+    }
+
+    private static MethodHandle INDY_call182;
+    private static MethodHandle INDY_call182 () throws Throwable {
+        if (INDY_call182 != null) return INDY_call182;
+        CallSite cs = (CallSite) MH_bootstrap182 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap182 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper182 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call182 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap182 (Object l, Object n, Object t) throws Throwable { return _mh[ 182 ].invokeExact(l, n, t); }
+
+    // 183
+    private static MethodType MT_bootstrap183 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap183 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap183", MT_bootstrap183 ());
+    }
+
+    private static MethodHandle INDY_call183;
+    private static MethodHandle INDY_call183 () throws Throwable {
+        if (INDY_call183 != null) return INDY_call183;
+        CallSite cs = (CallSite) MH_bootstrap183 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap183 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper183 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call183 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap183 (Object l, Object n, Object t) throws Throwable { return _mh[ 183 ].invokeExact(l, n, t); }
+
+    // 184
+    private static MethodType MT_bootstrap184 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap184 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap184", MT_bootstrap184 ());
+    }
+
+    private static MethodHandle INDY_call184;
+    private static MethodHandle INDY_call184 () throws Throwable {
+        if (INDY_call184 != null) return INDY_call184;
+        CallSite cs = (CallSite) MH_bootstrap184 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap184 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper184 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call184 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap184 (Object l, Object n, Object t) throws Throwable { return _mh[ 184 ].invokeExact(l, n, t); }
+
+    // 185
+    private static MethodType MT_bootstrap185 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap185 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap185", MT_bootstrap185 ());
+    }
+
+    private static MethodHandle INDY_call185;
+    private static MethodHandle INDY_call185 () throws Throwable {
+        if (INDY_call185 != null) return INDY_call185;
+        CallSite cs = (CallSite) MH_bootstrap185 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap185 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper185 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call185 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap185 (Object l, Object n, Object t) throws Throwable { return _mh[ 185 ].invokeExact(l, n, t); }
+
+    // 186
+    private static MethodType MT_bootstrap186 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap186 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap186", MT_bootstrap186 ());
+    }
+
+    private static MethodHandle INDY_call186;
+    private static MethodHandle INDY_call186 () throws Throwable {
+        if (INDY_call186 != null) return INDY_call186;
+        CallSite cs = (CallSite) MH_bootstrap186 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap186 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper186 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call186 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap186 (Object l, Object n, Object t) throws Throwable { return _mh[ 186 ].invokeExact(l, n, t); }
+
+    // 187
+    private static MethodType MT_bootstrap187 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap187 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap187", MT_bootstrap187 ());
+    }
+
+    private static MethodHandle INDY_call187;
+    private static MethodHandle INDY_call187 () throws Throwable {
+        if (INDY_call187 != null) return INDY_call187;
+        CallSite cs = (CallSite) MH_bootstrap187 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap187 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper187 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call187 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap187 (Object l, Object n, Object t) throws Throwable { return _mh[ 187 ].invokeExact(l, n, t); }
+
+    // 188
+    private static MethodType MT_bootstrap188 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap188 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap188", MT_bootstrap188 ());
+    }
+
+    private static MethodHandle INDY_call188;
+    private static MethodHandle INDY_call188 () throws Throwable {
+        if (INDY_call188 != null) return INDY_call188;
+        CallSite cs = (CallSite) MH_bootstrap188 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap188 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper188 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call188 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap188 (Object l, Object n, Object t) throws Throwable { return _mh[ 188 ].invokeExact(l, n, t); }
+
+    // 189
+    private static MethodType MT_bootstrap189 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap189 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap189", MT_bootstrap189 ());
+    }
+
+    private static MethodHandle INDY_call189;
+    private static MethodHandle INDY_call189 () throws Throwable {
+        if (INDY_call189 != null) return INDY_call189;
+        CallSite cs = (CallSite) MH_bootstrap189 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap189 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper189 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call189 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap189 (Object l, Object n, Object t) throws Throwable { return _mh[ 189 ].invokeExact(l, n, t); }
+
+    // 190
+    private static MethodType MT_bootstrap190 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap190 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap190", MT_bootstrap190 ());
+    }
+
+    private static MethodHandle INDY_call190;
+    private static MethodHandle INDY_call190 () throws Throwable {
+        if (INDY_call190 != null) return INDY_call190;
+        CallSite cs = (CallSite) MH_bootstrap190 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap190 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper190 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call190 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap190 (Object l, Object n, Object t) throws Throwable { return _mh[ 190 ].invokeExact(l, n, t); }
+
+    // 191
+    private static MethodType MT_bootstrap191 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap191 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap191", MT_bootstrap191 ());
+    }
+
+    private static MethodHandle INDY_call191;
+    private static MethodHandle INDY_call191 () throws Throwable {
+        if (INDY_call191 != null) return INDY_call191;
+        CallSite cs = (CallSite) MH_bootstrap191 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap191 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper191 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call191 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap191 (Object l, Object n, Object t) throws Throwable { return _mh[ 191 ].invokeExact(l, n, t); }
+
+    // 192
+    private static MethodType MT_bootstrap192 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap192 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap192", MT_bootstrap192 ());
+    }
+
+    private static MethodHandle INDY_call192;
+    private static MethodHandle INDY_call192 () throws Throwable {
+        if (INDY_call192 != null) return INDY_call192;
+        CallSite cs = (CallSite) MH_bootstrap192 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap192 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper192 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call192 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap192 (Object l, Object n, Object t) throws Throwable { return _mh[ 192 ].invokeExact(l, n, t); }
+
+    // 193
+    private static MethodType MT_bootstrap193 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap193 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap193", MT_bootstrap193 ());
+    }
+
+    private static MethodHandle INDY_call193;
+    private static MethodHandle INDY_call193 () throws Throwable {
+        if (INDY_call193 != null) return INDY_call193;
+        CallSite cs = (CallSite) MH_bootstrap193 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap193 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper193 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call193 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap193 (Object l, Object n, Object t) throws Throwable { return _mh[ 193 ].invokeExact(l, n, t); }
+
+    // 194
+    private static MethodType MT_bootstrap194 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap194 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap194", MT_bootstrap194 ());
+    }
+
+    private static MethodHandle INDY_call194;
+    private static MethodHandle INDY_call194 () throws Throwable {
+        if (INDY_call194 != null) return INDY_call194;
+        CallSite cs = (CallSite) MH_bootstrap194 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap194 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper194 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call194 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap194 (Object l, Object n, Object t) throws Throwable { return _mh[ 194 ].invokeExact(l, n, t); }
+
+    // 195
+    private static MethodType MT_bootstrap195 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap195 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap195", MT_bootstrap195 ());
+    }
+
+    private static MethodHandle INDY_call195;
+    private static MethodHandle INDY_call195 () throws Throwable {
+        if (INDY_call195 != null) return INDY_call195;
+        CallSite cs = (CallSite) MH_bootstrap195 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap195 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper195 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call195 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap195 (Object l, Object n, Object t) throws Throwable { return _mh[ 195 ].invokeExact(l, n, t); }
+
+    // 196
+    private static MethodType MT_bootstrap196 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap196 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap196", MT_bootstrap196 ());
+    }
+
+    private static MethodHandle INDY_call196;
+    private static MethodHandle INDY_call196 () throws Throwable {
+        if (INDY_call196 != null) return INDY_call196;
+        CallSite cs = (CallSite) MH_bootstrap196 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap196 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper196 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call196 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap196 (Object l, Object n, Object t) throws Throwable { return _mh[ 196 ].invokeExact(l, n, t); }
+
+    // 197
+    private static MethodType MT_bootstrap197 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap197 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap197", MT_bootstrap197 ());
+    }
+
+    private static MethodHandle INDY_call197;
+    private static MethodHandle INDY_call197 () throws Throwable {
+        if (INDY_call197 != null) return INDY_call197;
+        CallSite cs = (CallSite) MH_bootstrap197 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap197 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper197 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call197 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap197 (Object l, Object n, Object t) throws Throwable { return _mh[ 197 ].invokeExact(l, n, t); }
+
+    // 198
+    private static MethodType MT_bootstrap198 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap198 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap198", MT_bootstrap198 ());
+    }
+
+    private static MethodHandle INDY_call198;
+    private static MethodHandle INDY_call198 () throws Throwable {
+        if (INDY_call198 != null) return INDY_call198;
+        CallSite cs = (CallSite) MH_bootstrap198 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap198 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper198 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call198 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap198 (Object l, Object n, Object t) throws Throwable { return _mh[ 198 ].invokeExact(l, n, t); }
+
+    // 199
+    private static MethodType MT_bootstrap199 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap199 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap199", MT_bootstrap199 ());
+    }
+
+    private static MethodHandle INDY_call199;
+    private static MethodHandle INDY_call199 () throws Throwable {
+        if (INDY_call199 != null) return INDY_call199;
+        CallSite cs = (CallSite) MH_bootstrap199 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap199 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper199 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call199 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap199 (Object l, Object n, Object t) throws Throwable { return _mh[ 199 ].invokeExact(l, n, t); }
+
+    // 200
+    private static MethodType MT_bootstrap200 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap200 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap200", MT_bootstrap200 ());
+    }
+
+    private static MethodHandle INDY_call200;
+    private static MethodHandle INDY_call200 () throws Throwable {
+        if (INDY_call200 != null) return INDY_call200;
+        CallSite cs = (CallSite) MH_bootstrap200 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap200 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper200 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call200 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap200 (Object l, Object n, Object t) throws Throwable { return _mh[ 200 ].invokeExact(l, n, t); }
+
+    // 201
+    private static MethodType MT_bootstrap201 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap201 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap201", MT_bootstrap201 ());
+    }
+
+    private static MethodHandle INDY_call201;
+    private static MethodHandle INDY_call201 () throws Throwable {
+        if (INDY_call201 != null) return INDY_call201;
+        CallSite cs = (CallSite) MH_bootstrap201 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap201 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper201 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call201 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap201 (Object l, Object n, Object t) throws Throwable { return _mh[ 201 ].invokeExact(l, n, t); }
+
+    // 202
+    private static MethodType MT_bootstrap202 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap202 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap202", MT_bootstrap202 ());
+    }
+
+    private static MethodHandle INDY_call202;
+    private static MethodHandle INDY_call202 () throws Throwable {
+        if (INDY_call202 != null) return INDY_call202;
+        CallSite cs = (CallSite) MH_bootstrap202 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap202 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper202 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call202 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap202 (Object l, Object n, Object t) throws Throwable { return _mh[ 202 ].invokeExact(l, n, t); }
+
+    // 203
+    private static MethodType MT_bootstrap203 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap203 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap203", MT_bootstrap203 ());
+    }
+
+    private static MethodHandle INDY_call203;
+    private static MethodHandle INDY_call203 () throws Throwable {
+        if (INDY_call203 != null) return INDY_call203;
+        CallSite cs = (CallSite) MH_bootstrap203 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap203 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper203 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call203 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap203 (Object l, Object n, Object t) throws Throwable { return _mh[ 203 ].invokeExact(l, n, t); }
+
+    // 204
+    private static MethodType MT_bootstrap204 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap204 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap204", MT_bootstrap204 ());
+    }
+
+    private static MethodHandle INDY_call204;
+    private static MethodHandle INDY_call204 () throws Throwable {
+        if (INDY_call204 != null) return INDY_call204;
+        CallSite cs = (CallSite) MH_bootstrap204 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap204 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper204 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call204 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap204 (Object l, Object n, Object t) throws Throwable { return _mh[ 204 ].invokeExact(l, n, t); }
+
+    // 205
+    private static MethodType MT_bootstrap205 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap205 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap205", MT_bootstrap205 ());
+    }
+
+    private static MethodHandle INDY_call205;
+    private static MethodHandle INDY_call205 () throws Throwable {
+        if (INDY_call205 != null) return INDY_call205;
+        CallSite cs = (CallSite) MH_bootstrap205 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap205 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper205 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call205 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap205 (Object l, Object n, Object t) throws Throwable { return _mh[ 205 ].invokeExact(l, n, t); }
+
+    // 206
+    private static MethodType MT_bootstrap206 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap206 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap206", MT_bootstrap206 ());
+    }
+
+    private static MethodHandle INDY_call206;
+    private static MethodHandle INDY_call206 () throws Throwable {
+        if (INDY_call206 != null) return INDY_call206;
+        CallSite cs = (CallSite) MH_bootstrap206 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap206 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper206 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call206 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap206 (Object l, Object n, Object t) throws Throwable { return _mh[ 206 ].invokeExact(l, n, t); }
+
+    // 207
+    private static MethodType MT_bootstrap207 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap207 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap207", MT_bootstrap207 ());
+    }
+
+    private static MethodHandle INDY_call207;
+    private static MethodHandle INDY_call207 () throws Throwable {
+        if (INDY_call207 != null) return INDY_call207;
+        CallSite cs = (CallSite) MH_bootstrap207 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap207 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper207 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call207 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap207 (Object l, Object n, Object t) throws Throwable { return _mh[ 207 ].invokeExact(l, n, t); }
+
+    // 208
+    private static MethodType MT_bootstrap208 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap208 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap208", MT_bootstrap208 ());
+    }
+
+    private static MethodHandle INDY_call208;
+    private static MethodHandle INDY_call208 () throws Throwable {
+        if (INDY_call208 != null) return INDY_call208;
+        CallSite cs = (CallSite) MH_bootstrap208 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap208 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper208 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call208 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap208 (Object l, Object n, Object t) throws Throwable { return _mh[ 208 ].invokeExact(l, n, t); }
+
+    // 209
+    private static MethodType MT_bootstrap209 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap209 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap209", MT_bootstrap209 ());
+    }
+
+    private static MethodHandle INDY_call209;
+    private static MethodHandle INDY_call209 () throws Throwable {
+        if (INDY_call209 != null) return INDY_call209;
+        CallSite cs = (CallSite) MH_bootstrap209 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap209 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper209 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call209 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap209 (Object l, Object n, Object t) throws Throwable { return _mh[ 209 ].invokeExact(l, n, t); }
+
+    // 210
+    private static MethodType MT_bootstrap210 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap210 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap210", MT_bootstrap210 ());
+    }
+
+    private static MethodHandle INDY_call210;
+    private static MethodHandle INDY_call210 () throws Throwable {
+        if (INDY_call210 != null) return INDY_call210;
+        CallSite cs = (CallSite) MH_bootstrap210 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap210 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper210 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call210 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap210 (Object l, Object n, Object t) throws Throwable { return _mh[ 210 ].invokeExact(l, n, t); }
+
+    // 211
+    private static MethodType MT_bootstrap211 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap211 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap211", MT_bootstrap211 ());
+    }
+
+    private static MethodHandle INDY_call211;
+    private static MethodHandle INDY_call211 () throws Throwable {
+        if (INDY_call211 != null) return INDY_call211;
+        CallSite cs = (CallSite) MH_bootstrap211 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap211 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper211 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call211 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap211 (Object l, Object n, Object t) throws Throwable { return _mh[ 211 ].invokeExact(l, n, t); }
+
+    // 212
+    private static MethodType MT_bootstrap212 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap212 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap212", MT_bootstrap212 ());
+    }
+
+    private static MethodHandle INDY_call212;
+    private static MethodHandle INDY_call212 () throws Throwable {
+        if (INDY_call212 != null) return INDY_call212;
+        CallSite cs = (CallSite) MH_bootstrap212 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap212 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper212 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call212 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap212 (Object l, Object n, Object t) throws Throwable { return _mh[ 212 ].invokeExact(l, n, t); }
+
+    // 213
+    private static MethodType MT_bootstrap213 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap213 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap213", MT_bootstrap213 ());
+    }
+
+    private static MethodHandle INDY_call213;
+    private static MethodHandle INDY_call213 () throws Throwable {
+        if (INDY_call213 != null) return INDY_call213;
+        CallSite cs = (CallSite) MH_bootstrap213 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap213 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper213 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call213 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap213 (Object l, Object n, Object t) throws Throwable { return _mh[ 213 ].invokeExact(l, n, t); }
+
+    // 214
+    private static MethodType MT_bootstrap214 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap214 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap214", MT_bootstrap214 ());
+    }
+
+    private static MethodHandle INDY_call214;
+    private static MethodHandle INDY_call214 () throws Throwable {
+        if (INDY_call214 != null) return INDY_call214;
+        CallSite cs = (CallSite) MH_bootstrap214 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap214 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper214 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call214 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap214 (Object l, Object n, Object t) throws Throwable { return _mh[ 214 ].invokeExact(l, n, t); }
+
+    // 215
+    private static MethodType MT_bootstrap215 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap215 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap215", MT_bootstrap215 ());
+    }
+
+    private static MethodHandle INDY_call215;
+    private static MethodHandle INDY_call215 () throws Throwable {
+        if (INDY_call215 != null) return INDY_call215;
+        CallSite cs = (CallSite) MH_bootstrap215 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap215 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper215 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call215 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap215 (Object l, Object n, Object t) throws Throwable { return _mh[ 215 ].invokeExact(l, n, t); }
+
+    // 216
+    private static MethodType MT_bootstrap216 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap216 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap216", MT_bootstrap216 ());
+    }
+
+    private static MethodHandle INDY_call216;
+    private static MethodHandle INDY_call216 () throws Throwable {
+        if (INDY_call216 != null) return INDY_call216;
+        CallSite cs = (CallSite) MH_bootstrap216 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap216 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper216 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call216 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap216 (Object l, Object n, Object t) throws Throwable { return _mh[ 216 ].invokeExact(l, n, t); }
+
+    // 217
+    private static MethodType MT_bootstrap217 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap217 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap217", MT_bootstrap217 ());
+    }
+
+    private static MethodHandle INDY_call217;
+    private static MethodHandle INDY_call217 () throws Throwable {
+        if (INDY_call217 != null) return INDY_call217;
+        CallSite cs = (CallSite) MH_bootstrap217 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap217 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper217 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call217 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap217 (Object l, Object n, Object t) throws Throwable { return _mh[ 217 ].invokeExact(l, n, t); }
+
+    // 218
+    private static MethodType MT_bootstrap218 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap218 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap218", MT_bootstrap218 ());
+    }
+
+    private static MethodHandle INDY_call218;
+    private static MethodHandle INDY_call218 () throws Throwable {
+        if (INDY_call218 != null) return INDY_call218;
+        CallSite cs = (CallSite) MH_bootstrap218 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap218 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper218 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call218 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap218 (Object l, Object n, Object t) throws Throwable { return _mh[ 218 ].invokeExact(l, n, t); }
+
+    // 219
+    private static MethodType MT_bootstrap219 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap219 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap219", MT_bootstrap219 ());
+    }
+
+    private static MethodHandle INDY_call219;
+    private static MethodHandle INDY_call219 () throws Throwable {
+        if (INDY_call219 != null) return INDY_call219;
+        CallSite cs = (CallSite) MH_bootstrap219 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap219 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper219 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call219 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap219 (Object l, Object n, Object t) throws Throwable { return _mh[ 219 ].invokeExact(l, n, t); }
+
+    // 220
+    private static MethodType MT_bootstrap220 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap220 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap220", MT_bootstrap220 ());
+    }
+
+    private static MethodHandle INDY_call220;
+    private static MethodHandle INDY_call220 () throws Throwable {
+        if (INDY_call220 != null) return INDY_call220;
+        CallSite cs = (CallSite) MH_bootstrap220 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap220 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper220 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call220 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap220 (Object l, Object n, Object t) throws Throwable { return _mh[ 220 ].invokeExact(l, n, t); }
+
+    // 221
+    private static MethodType MT_bootstrap221 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap221 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap221", MT_bootstrap221 ());
+    }
+
+    private static MethodHandle INDY_call221;
+    private static MethodHandle INDY_call221 () throws Throwable {
+        if (INDY_call221 != null) return INDY_call221;
+        CallSite cs = (CallSite) MH_bootstrap221 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap221 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper221 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call221 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap221 (Object l, Object n, Object t) throws Throwable { return _mh[ 221 ].invokeExact(l, n, t); }
+
+    // 222
+    private static MethodType MT_bootstrap222 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap222 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap222", MT_bootstrap222 ());
+    }
+
+    private static MethodHandle INDY_call222;
+    private static MethodHandle INDY_call222 () throws Throwable {
+        if (INDY_call222 != null) return INDY_call222;
+        CallSite cs = (CallSite) MH_bootstrap222 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap222 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper222 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call222 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap222 (Object l, Object n, Object t) throws Throwable { return _mh[ 222 ].invokeExact(l, n, t); }
+
+    // 223
+    private static MethodType MT_bootstrap223 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap223 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap223", MT_bootstrap223 ());
+    }
+
+    private static MethodHandle INDY_call223;
+    private static MethodHandle INDY_call223 () throws Throwable {
+        if (INDY_call223 != null) return INDY_call223;
+        CallSite cs = (CallSite) MH_bootstrap223 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap223 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper223 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call223 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap223 (Object l, Object n, Object t) throws Throwable { return _mh[ 223 ].invokeExact(l, n, t); }
+
+    // 224
+    private static MethodType MT_bootstrap224 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap224 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap224", MT_bootstrap224 ());
+    }
+
+    private static MethodHandle INDY_call224;
+    private static MethodHandle INDY_call224 () throws Throwable {
+        if (INDY_call224 != null) return INDY_call224;
+        CallSite cs = (CallSite) MH_bootstrap224 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap224 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper224 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call224 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap224 (Object l, Object n, Object t) throws Throwable { return _mh[ 224 ].invokeExact(l, n, t); }
+
+    // 225
+    private static MethodType MT_bootstrap225 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap225 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap225", MT_bootstrap225 ());
+    }
+
+    private static MethodHandle INDY_call225;
+    private static MethodHandle INDY_call225 () throws Throwable {
+        if (INDY_call225 != null) return INDY_call225;
+        CallSite cs = (CallSite) MH_bootstrap225 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap225 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper225 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call225 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap225 (Object l, Object n, Object t) throws Throwable { return _mh[ 225 ].invokeExact(l, n, t); }
+
+    // 226
+    private static MethodType MT_bootstrap226 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap226 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap226", MT_bootstrap226 ());
+    }
+
+    private static MethodHandle INDY_call226;
+    private static MethodHandle INDY_call226 () throws Throwable {
+        if (INDY_call226 != null) return INDY_call226;
+        CallSite cs = (CallSite) MH_bootstrap226 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap226 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper226 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call226 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap226 (Object l, Object n, Object t) throws Throwable { return _mh[ 226 ].invokeExact(l, n, t); }
+
+    // 227
+    private static MethodType MT_bootstrap227 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap227 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap227", MT_bootstrap227 ());
+    }
+
+    private static MethodHandle INDY_call227;
+    private static MethodHandle INDY_call227 () throws Throwable {
+        if (INDY_call227 != null) return INDY_call227;
+        CallSite cs = (CallSite) MH_bootstrap227 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap227 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper227 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call227 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap227 (Object l, Object n, Object t) throws Throwable { return _mh[ 227 ].invokeExact(l, n, t); }
+
+    // 228
+    private static MethodType MT_bootstrap228 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap228 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap228", MT_bootstrap228 ());
+    }
+
+    private static MethodHandle INDY_call228;
+    private static MethodHandle INDY_call228 () throws Throwable {
+        if (INDY_call228 != null) return INDY_call228;
+        CallSite cs = (CallSite) MH_bootstrap228 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap228 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper228 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call228 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap228 (Object l, Object n, Object t) throws Throwable { return _mh[ 228 ].invokeExact(l, n, t); }
+
+    // 229
+    private static MethodType MT_bootstrap229 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap229 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap229", MT_bootstrap229 ());
+    }
+
+    private static MethodHandle INDY_call229;
+    private static MethodHandle INDY_call229 () throws Throwable {
+        if (INDY_call229 != null) return INDY_call229;
+        CallSite cs = (CallSite) MH_bootstrap229 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap229 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper229 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call229 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap229 (Object l, Object n, Object t) throws Throwable { return _mh[ 229 ].invokeExact(l, n, t); }
+
+    // 230
+    private static MethodType MT_bootstrap230 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap230 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap230", MT_bootstrap230 ());
+    }
+
+    private static MethodHandle INDY_call230;
+    private static MethodHandle INDY_call230 () throws Throwable {
+        if (INDY_call230 != null) return INDY_call230;
+        CallSite cs = (CallSite) MH_bootstrap230 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap230 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper230 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call230 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap230 (Object l, Object n, Object t) throws Throwable { return _mh[ 230 ].invokeExact(l, n, t); }
+
+    // 231
+    private static MethodType MT_bootstrap231 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap231 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap231", MT_bootstrap231 ());
+    }
+
+    private static MethodHandle INDY_call231;
+    private static MethodHandle INDY_call231 () throws Throwable {
+        if (INDY_call231 != null) return INDY_call231;
+        CallSite cs = (CallSite) MH_bootstrap231 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap231 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper231 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call231 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap231 (Object l, Object n, Object t) throws Throwable { return _mh[ 231 ].invokeExact(l, n, t); }
+
+    // 232
+    private static MethodType MT_bootstrap232 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap232 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap232", MT_bootstrap232 ());
+    }
+
+    private static MethodHandle INDY_call232;
+    private static MethodHandle INDY_call232 () throws Throwable {
+        if (INDY_call232 != null) return INDY_call232;
+        CallSite cs = (CallSite) MH_bootstrap232 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap232 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper232 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call232 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap232 (Object l, Object n, Object t) throws Throwable { return _mh[ 232 ].invokeExact(l, n, t); }
+
+    // 233
+    private static MethodType MT_bootstrap233 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap233 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap233", MT_bootstrap233 ());
+    }
+
+    private static MethodHandle INDY_call233;
+    private static MethodHandle INDY_call233 () throws Throwable {
+        if (INDY_call233 != null) return INDY_call233;
+        CallSite cs = (CallSite) MH_bootstrap233 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap233 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper233 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call233 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap233 (Object l, Object n, Object t) throws Throwable { return _mh[ 233 ].invokeExact(l, n, t); }
+
+    // 234
+    private static MethodType MT_bootstrap234 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap234 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap234", MT_bootstrap234 ());
+    }
+
+    private static MethodHandle INDY_call234;
+    private static MethodHandle INDY_call234 () throws Throwable {
+        if (INDY_call234 != null) return INDY_call234;
+        CallSite cs = (CallSite) MH_bootstrap234 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap234 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper234 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call234 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap234 (Object l, Object n, Object t) throws Throwable { return _mh[ 234 ].invokeExact(l, n, t); }
+
+    // 235
+    private static MethodType MT_bootstrap235 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap235 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap235", MT_bootstrap235 ());
+    }
+
+    private static MethodHandle INDY_call235;
+    private static MethodHandle INDY_call235 () throws Throwable {
+        if (INDY_call235 != null) return INDY_call235;
+        CallSite cs = (CallSite) MH_bootstrap235 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap235 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper235 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call235 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap235 (Object l, Object n, Object t) throws Throwable { return _mh[ 235 ].invokeExact(l, n, t); }
+
+    // 236
+    private static MethodType MT_bootstrap236 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap236 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap236", MT_bootstrap236 ());
+    }
+
+    private static MethodHandle INDY_call236;
+    private static MethodHandle INDY_call236 () throws Throwable {
+        if (INDY_call236 != null) return INDY_call236;
+        CallSite cs = (CallSite) MH_bootstrap236 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap236 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper236 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call236 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap236 (Object l, Object n, Object t) throws Throwable { return _mh[ 236 ].invokeExact(l, n, t); }
+
+    // 237
+    private static MethodType MT_bootstrap237 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap237 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap237", MT_bootstrap237 ());
+    }
+
+    private static MethodHandle INDY_call237;
+    private static MethodHandle INDY_call237 () throws Throwable {
+        if (INDY_call237 != null) return INDY_call237;
+        CallSite cs = (CallSite) MH_bootstrap237 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap237 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper237 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call237 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap237 (Object l, Object n, Object t) throws Throwable { return _mh[ 237 ].invokeExact(l, n, t); }
+
+    // 238
+    private static MethodType MT_bootstrap238 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap238 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap238", MT_bootstrap238 ());
+    }
+
+    private static MethodHandle INDY_call238;
+    private static MethodHandle INDY_call238 () throws Throwable {
+        if (INDY_call238 != null) return INDY_call238;
+        CallSite cs = (CallSite) MH_bootstrap238 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap238 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper238 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call238 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap238 (Object l, Object n, Object t) throws Throwable { return _mh[ 238 ].invokeExact(l, n, t); }
+
+    // 239
+    private static MethodType MT_bootstrap239 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap239 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap239", MT_bootstrap239 ());
+    }
+
+    private static MethodHandle INDY_call239;
+    private static MethodHandle INDY_call239 () throws Throwable {
+        if (INDY_call239 != null) return INDY_call239;
+        CallSite cs = (CallSite) MH_bootstrap239 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap239 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper239 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call239 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap239 (Object l, Object n, Object t) throws Throwable { return _mh[ 239 ].invokeExact(l, n, t); }
+
+    // 240
+    private static MethodType MT_bootstrap240 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap240 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap240", MT_bootstrap240 ());
+    }
+
+    private static MethodHandle INDY_call240;
+    private static MethodHandle INDY_call240 () throws Throwable {
+        if (INDY_call240 != null) return INDY_call240;
+        CallSite cs = (CallSite) MH_bootstrap240 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap240 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper240 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call240 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap240 (Object l, Object n, Object t) throws Throwable { return _mh[ 240 ].invokeExact(l, n, t); }
+
+    // 241
+    private static MethodType MT_bootstrap241 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap241 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap241", MT_bootstrap241 ());
+    }
+
+    private static MethodHandle INDY_call241;
+    private static MethodHandle INDY_call241 () throws Throwable {
+        if (INDY_call241 != null) return INDY_call241;
+        CallSite cs = (CallSite) MH_bootstrap241 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap241 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper241 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call241 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap241 (Object l, Object n, Object t) throws Throwable { return _mh[ 241 ].invokeExact(l, n, t); }
+
+    // 242
+    private static MethodType MT_bootstrap242 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap242 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap242", MT_bootstrap242 ());
+    }
+
+    private static MethodHandle INDY_call242;
+    private static MethodHandle INDY_call242 () throws Throwable {
+        if (INDY_call242 != null) return INDY_call242;
+        CallSite cs = (CallSite) MH_bootstrap242 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap242 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper242 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call242 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap242 (Object l, Object n, Object t) throws Throwable { return _mh[ 242 ].invokeExact(l, n, t); }
+
+    // 243
+    private static MethodType MT_bootstrap243 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap243 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap243", MT_bootstrap243 ());
+    }
+
+    private static MethodHandle INDY_call243;
+    private static MethodHandle INDY_call243 () throws Throwable {
+        if (INDY_call243 != null) return INDY_call243;
+        CallSite cs = (CallSite) MH_bootstrap243 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap243 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper243 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call243 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap243 (Object l, Object n, Object t) throws Throwable { return _mh[ 243 ].invokeExact(l, n, t); }
+
+    // 244
+    private static MethodType MT_bootstrap244 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap244 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap244", MT_bootstrap244 ());
+    }
+
+    private static MethodHandle INDY_call244;
+    private static MethodHandle INDY_call244 () throws Throwable {
+        if (INDY_call244 != null) return INDY_call244;
+        CallSite cs = (CallSite) MH_bootstrap244 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap244 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper244 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call244 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap244 (Object l, Object n, Object t) throws Throwable { return _mh[ 244 ].invokeExact(l, n, t); }
+
+    // 245
+    private static MethodType MT_bootstrap245 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap245 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap245", MT_bootstrap245 ());
+    }
+
+    private static MethodHandle INDY_call245;
+    private static MethodHandle INDY_call245 () throws Throwable {
+        if (INDY_call245 != null) return INDY_call245;
+        CallSite cs = (CallSite) MH_bootstrap245 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap245 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper245 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call245 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap245 (Object l, Object n, Object t) throws Throwable { return _mh[ 245 ].invokeExact(l, n, t); }
+
+    // 246
+    private static MethodType MT_bootstrap246 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap246 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap246", MT_bootstrap246 ());
+    }
+
+    private static MethodHandle INDY_call246;
+    private static MethodHandle INDY_call246 () throws Throwable {
+        if (INDY_call246 != null) return INDY_call246;
+        CallSite cs = (CallSite) MH_bootstrap246 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap246 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper246 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call246 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap246 (Object l, Object n, Object t) throws Throwable { return _mh[ 246 ].invokeExact(l, n, t); }
+
+    // 247
+    private static MethodType MT_bootstrap247 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap247 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap247", MT_bootstrap247 ());
+    }
+
+    private static MethodHandle INDY_call247;
+    private static MethodHandle INDY_call247 () throws Throwable {
+        if (INDY_call247 != null) return INDY_call247;
+        CallSite cs = (CallSite) MH_bootstrap247 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap247 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper247 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call247 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap247 (Object l, Object n, Object t) throws Throwable { return _mh[ 247 ].invokeExact(l, n, t); }
+
+    // 248
+    private static MethodType MT_bootstrap248 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap248 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap248", MT_bootstrap248 ());
+    }
+
+    private static MethodHandle INDY_call248;
+    private static MethodHandle INDY_call248 () throws Throwable {
+        if (INDY_call248 != null) return INDY_call248;
+        CallSite cs = (CallSite) MH_bootstrap248 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap248 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper248 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call248 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap248 (Object l, Object n, Object t) throws Throwable { return _mh[ 248 ].invokeExact(l, n, t); }
+
+    // 249
+    private static MethodType MT_bootstrap249 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap249 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap249", MT_bootstrap249 ());
+    }
+
+    private static MethodHandle INDY_call249;
+    private static MethodHandle INDY_call249 () throws Throwable {
+        if (INDY_call249 != null) return INDY_call249;
+        CallSite cs = (CallSite) MH_bootstrap249 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap249 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper249 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call249 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap249 (Object l, Object n, Object t) throws Throwable { return _mh[ 249 ].invokeExact(l, n, t); }
+
+    // 250
+    private static MethodType MT_bootstrap250 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap250 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap250", MT_bootstrap250 ());
+    }
+
+    private static MethodHandle INDY_call250;
+    private static MethodHandle INDY_call250 () throws Throwable {
+        if (INDY_call250 != null) return INDY_call250;
+        CallSite cs = (CallSite) MH_bootstrap250 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap250 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper250 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call250 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap250 (Object l, Object n, Object t) throws Throwable { return _mh[ 250 ].invokeExact(l, n, t); }
+
+    // 251
+    private static MethodType MT_bootstrap251 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap251 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap251", MT_bootstrap251 ());
+    }
+
+    private static MethodHandle INDY_call251;
+    private static MethodHandle INDY_call251 () throws Throwable {
+        if (INDY_call251 != null) return INDY_call251;
+        CallSite cs = (CallSite) MH_bootstrap251 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap251 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper251 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call251 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap251 (Object l, Object n, Object t) throws Throwable { return _mh[ 251 ].invokeExact(l, n, t); }
+
+    // 252
+    private static MethodType MT_bootstrap252 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap252 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap252", MT_bootstrap252 ());
+    }
+
+    private static MethodHandle INDY_call252;
+    private static MethodHandle INDY_call252 () throws Throwable {
+        if (INDY_call252 != null) return INDY_call252;
+        CallSite cs = (CallSite) MH_bootstrap252 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap252 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper252 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call252 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap252 (Object l, Object n, Object t) throws Throwable { return _mh[ 252 ].invokeExact(l, n, t); }
+
+    // 253
+    private static MethodType MT_bootstrap253 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap253 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap253", MT_bootstrap253 ());
+    }
+
+    private static MethodHandle INDY_call253;
+    private static MethodHandle INDY_call253 () throws Throwable {
+        if (INDY_call253 != null) return INDY_call253;
+        CallSite cs = (CallSite) MH_bootstrap253 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap253 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper253 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call253 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap253 (Object l, Object n, Object t) throws Throwable { return _mh[ 253 ].invokeExact(l, n, t); }
+
+    // 254
+    private static MethodType MT_bootstrap254 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap254 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap254", MT_bootstrap254 ());
+    }
+
+    private static MethodHandle INDY_call254;
+    private static MethodHandle INDY_call254 () throws Throwable {
+        if (INDY_call254 != null) return INDY_call254;
+        CallSite cs = (CallSite) MH_bootstrap254 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap254 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper254 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call254 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap254 (Object l, Object n, Object t) throws Throwable { return _mh[ 254 ].invokeExact(l, n, t); }
+
+    // 255
+    private static MethodType MT_bootstrap255 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap255 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap255", MT_bootstrap255 ());
+    }
+
+    private static MethodHandle INDY_call255;
+    private static MethodHandle INDY_call255 () throws Throwable {
+        if (INDY_call255 != null) return INDY_call255;
+        CallSite cs = (CallSite) MH_bootstrap255 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap255 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper255 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call255 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap255 (Object l, Object n, Object t) throws Throwable { return _mh[ 255 ].invokeExact(l, n, t); }
+
+    // 256
+    private static MethodType MT_bootstrap256 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap256 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap256", MT_bootstrap256 ());
+    }
+
+    private static MethodHandle INDY_call256;
+    private static MethodHandle INDY_call256 () throws Throwable {
+        if (INDY_call256 != null) return INDY_call256;
+        CallSite cs = (CallSite) MH_bootstrap256 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap256 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper256 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call256 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap256 (Object l, Object n, Object t) throws Throwable { return _mh[ 256 ].invokeExact(l, n, t); }
+
+    // 257
+    private static MethodType MT_bootstrap257 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap257 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap257", MT_bootstrap257 ());
+    }
+
+    private static MethodHandle INDY_call257;
+    private static MethodHandle INDY_call257 () throws Throwable {
+        if (INDY_call257 != null) return INDY_call257;
+        CallSite cs = (CallSite) MH_bootstrap257 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap257 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper257 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call257 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap257 (Object l, Object n, Object t) throws Throwable { return _mh[ 257 ].invokeExact(l, n, t); }
+
+    // 258
+    private static MethodType MT_bootstrap258 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap258 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap258", MT_bootstrap258 ());
+    }
+
+    private static MethodHandle INDY_call258;
+    private static MethodHandle INDY_call258 () throws Throwable {
+        if (INDY_call258 != null) return INDY_call258;
+        CallSite cs = (CallSite) MH_bootstrap258 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap258 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper258 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call258 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap258 (Object l, Object n, Object t) throws Throwable { return _mh[ 258 ].invokeExact(l, n, t); }
+
+    // 259
+    private static MethodType MT_bootstrap259 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap259 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap259", MT_bootstrap259 ());
+    }
+
+    private static MethodHandle INDY_call259;
+    private static MethodHandle INDY_call259 () throws Throwable {
+        if (INDY_call259 != null) return INDY_call259;
+        CallSite cs = (CallSite) MH_bootstrap259 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap259 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper259 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call259 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap259 (Object l, Object n, Object t) throws Throwable { return _mh[ 259 ].invokeExact(l, n, t); }
+
+    // 260
+    private static MethodType MT_bootstrap260 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap260 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap260", MT_bootstrap260 ());
+    }
+
+    private static MethodHandle INDY_call260;
+    private static MethodHandle INDY_call260 () throws Throwable {
+        if (INDY_call260 != null) return INDY_call260;
+        CallSite cs = (CallSite) MH_bootstrap260 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap260 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper260 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call260 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap260 (Object l, Object n, Object t) throws Throwable { return _mh[ 260 ].invokeExact(l, n, t); }
+
+    // 261
+    private static MethodType MT_bootstrap261 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap261 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap261", MT_bootstrap261 ());
+    }
+
+    private static MethodHandle INDY_call261;
+    private static MethodHandle INDY_call261 () throws Throwable {
+        if (INDY_call261 != null) return INDY_call261;
+        CallSite cs = (CallSite) MH_bootstrap261 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap261 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper261 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call261 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap261 (Object l, Object n, Object t) throws Throwable { return _mh[ 261 ].invokeExact(l, n, t); }
+
+    // 262
+    private static MethodType MT_bootstrap262 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap262 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap262", MT_bootstrap262 ());
+    }
+
+    private static MethodHandle INDY_call262;
+    private static MethodHandle INDY_call262 () throws Throwable {
+        if (INDY_call262 != null) return INDY_call262;
+        CallSite cs = (CallSite) MH_bootstrap262 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap262 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper262 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call262 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap262 (Object l, Object n, Object t) throws Throwable { return _mh[ 262 ].invokeExact(l, n, t); }
+
+    // 263
+    private static MethodType MT_bootstrap263 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap263 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap263", MT_bootstrap263 ());
+    }
+
+    private static MethodHandle INDY_call263;
+    private static MethodHandle INDY_call263 () throws Throwable {
+        if (INDY_call263 != null) return INDY_call263;
+        CallSite cs = (CallSite) MH_bootstrap263 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap263 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper263 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call263 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap263 (Object l, Object n, Object t) throws Throwable { return _mh[ 263 ].invokeExact(l, n, t); }
+
+    // 264
+    private static MethodType MT_bootstrap264 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap264 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap264", MT_bootstrap264 ());
+    }
+
+    private static MethodHandle INDY_call264;
+    private static MethodHandle INDY_call264 () throws Throwable {
+        if (INDY_call264 != null) return INDY_call264;
+        CallSite cs = (CallSite) MH_bootstrap264 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap264 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper264 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call264 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap264 (Object l, Object n, Object t) throws Throwable { return _mh[ 264 ].invokeExact(l, n, t); }
+
+    // 265
+    private static MethodType MT_bootstrap265 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap265 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap265", MT_bootstrap265 ());
+    }
+
+    private static MethodHandle INDY_call265;
+    private static MethodHandle INDY_call265 () throws Throwable {
+        if (INDY_call265 != null) return INDY_call265;
+        CallSite cs = (CallSite) MH_bootstrap265 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap265 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper265 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call265 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap265 (Object l, Object n, Object t) throws Throwable { return _mh[ 265 ].invokeExact(l, n, t); }
+
+    // 266
+    private static MethodType MT_bootstrap266 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap266 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap266", MT_bootstrap266 ());
+    }
+
+    private static MethodHandle INDY_call266;
+    private static MethodHandle INDY_call266 () throws Throwable {
+        if (INDY_call266 != null) return INDY_call266;
+        CallSite cs = (CallSite) MH_bootstrap266 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap266 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper266 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call266 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap266 (Object l, Object n, Object t) throws Throwable { return _mh[ 266 ].invokeExact(l, n, t); }
+
+    // 267
+    private static MethodType MT_bootstrap267 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap267 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap267", MT_bootstrap267 ());
+    }
+
+    private static MethodHandle INDY_call267;
+    private static MethodHandle INDY_call267 () throws Throwable {
+        if (INDY_call267 != null) return INDY_call267;
+        CallSite cs = (CallSite) MH_bootstrap267 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap267 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper267 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call267 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap267 (Object l, Object n, Object t) throws Throwable { return _mh[ 267 ].invokeExact(l, n, t); }
+
+    // 268
+    private static MethodType MT_bootstrap268 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap268 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap268", MT_bootstrap268 ());
+    }
+
+    private static MethodHandle INDY_call268;
+    private static MethodHandle INDY_call268 () throws Throwable {
+        if (INDY_call268 != null) return INDY_call268;
+        CallSite cs = (CallSite) MH_bootstrap268 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap268 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper268 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call268 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap268 (Object l, Object n, Object t) throws Throwable { return _mh[ 268 ].invokeExact(l, n, t); }
+
+    // 269
+    private static MethodType MT_bootstrap269 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap269 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap269", MT_bootstrap269 ());
+    }
+
+    private static MethodHandle INDY_call269;
+    private static MethodHandle INDY_call269 () throws Throwable {
+        if (INDY_call269 != null) return INDY_call269;
+        CallSite cs = (CallSite) MH_bootstrap269 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap269 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper269 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call269 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap269 (Object l, Object n, Object t) throws Throwable { return _mh[ 269 ].invokeExact(l, n, t); }
+
+    // 270
+    private static MethodType MT_bootstrap270 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap270 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap270", MT_bootstrap270 ());
+    }
+
+    private static MethodHandle INDY_call270;
+    private static MethodHandle INDY_call270 () throws Throwable {
+        if (INDY_call270 != null) return INDY_call270;
+        CallSite cs = (CallSite) MH_bootstrap270 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap270 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper270 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call270 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap270 (Object l, Object n, Object t) throws Throwable { return _mh[ 270 ].invokeExact(l, n, t); }
+
+    // 271
+    private static MethodType MT_bootstrap271 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap271 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap271", MT_bootstrap271 ());
+    }
+
+    private static MethodHandle INDY_call271;
+    private static MethodHandle INDY_call271 () throws Throwable {
+        if (INDY_call271 != null) return INDY_call271;
+        CallSite cs = (CallSite) MH_bootstrap271 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap271 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper271 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call271 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap271 (Object l, Object n, Object t) throws Throwable { return _mh[ 271 ].invokeExact(l, n, t); }
+
+    // 272
+    private static MethodType MT_bootstrap272 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap272 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap272", MT_bootstrap272 ());
+    }
+
+    private static MethodHandle INDY_call272;
+    private static MethodHandle INDY_call272 () throws Throwable {
+        if (INDY_call272 != null) return INDY_call272;
+        CallSite cs = (CallSite) MH_bootstrap272 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap272 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper272 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call272 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap272 (Object l, Object n, Object t) throws Throwable { return _mh[ 272 ].invokeExact(l, n, t); }
+
+    // 273
+    private static MethodType MT_bootstrap273 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap273 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap273", MT_bootstrap273 ());
+    }
+
+    private static MethodHandle INDY_call273;
+    private static MethodHandle INDY_call273 () throws Throwable {
+        if (INDY_call273 != null) return INDY_call273;
+        CallSite cs = (CallSite) MH_bootstrap273 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap273 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper273 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call273 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap273 (Object l, Object n, Object t) throws Throwable { return _mh[ 273 ].invokeExact(l, n, t); }
+
+    // 274
+    private static MethodType MT_bootstrap274 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap274 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap274", MT_bootstrap274 ());
+    }
+
+    private static MethodHandle INDY_call274;
+    private static MethodHandle INDY_call274 () throws Throwable {
+        if (INDY_call274 != null) return INDY_call274;
+        CallSite cs = (CallSite) MH_bootstrap274 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap274 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper274 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call274 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap274 (Object l, Object n, Object t) throws Throwable { return _mh[ 274 ].invokeExact(l, n, t); }
+
+    // 275
+    private static MethodType MT_bootstrap275 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap275 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap275", MT_bootstrap275 ());
+    }
+
+    private static MethodHandle INDY_call275;
+    private static MethodHandle INDY_call275 () throws Throwable {
+        if (INDY_call275 != null) return INDY_call275;
+        CallSite cs = (CallSite) MH_bootstrap275 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap275 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper275 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call275 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap275 (Object l, Object n, Object t) throws Throwable { return _mh[ 275 ].invokeExact(l, n, t); }
+
+    // 276
+    private static MethodType MT_bootstrap276 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap276 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap276", MT_bootstrap276 ());
+    }
+
+    private static MethodHandle INDY_call276;
+    private static MethodHandle INDY_call276 () throws Throwable {
+        if (INDY_call276 != null) return INDY_call276;
+        CallSite cs = (CallSite) MH_bootstrap276 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap276 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper276 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call276 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap276 (Object l, Object n, Object t) throws Throwable { return _mh[ 276 ].invokeExact(l, n, t); }
+
+    // 277
+    private static MethodType MT_bootstrap277 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap277 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap277", MT_bootstrap277 ());
+    }
+
+    private static MethodHandle INDY_call277;
+    private static MethodHandle INDY_call277 () throws Throwable {
+        if (INDY_call277 != null) return INDY_call277;
+        CallSite cs = (CallSite) MH_bootstrap277 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap277 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper277 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call277 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap277 (Object l, Object n, Object t) throws Throwable { return _mh[ 277 ].invokeExact(l, n, t); }
+
+    // 278
+    private static MethodType MT_bootstrap278 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap278 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap278", MT_bootstrap278 ());
+    }
+
+    private static MethodHandle INDY_call278;
+    private static MethodHandle INDY_call278 () throws Throwable {
+        if (INDY_call278 != null) return INDY_call278;
+        CallSite cs = (CallSite) MH_bootstrap278 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap278 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper278 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call278 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap278 (Object l, Object n, Object t) throws Throwable { return _mh[ 278 ].invokeExact(l, n, t); }
+
+    // 279
+    private static MethodType MT_bootstrap279 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap279 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap279", MT_bootstrap279 ());
+    }
+
+    private static MethodHandle INDY_call279;
+    private static MethodHandle INDY_call279 () throws Throwable {
+        if (INDY_call279 != null) return INDY_call279;
+        CallSite cs = (CallSite) MH_bootstrap279 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap279 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper279 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call279 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap279 (Object l, Object n, Object t) throws Throwable { return _mh[ 279 ].invokeExact(l, n, t); }
+
+    // 280
+    private static MethodType MT_bootstrap280 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap280 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap280", MT_bootstrap280 ());
+    }
+
+    private static MethodHandle INDY_call280;
+    private static MethodHandle INDY_call280 () throws Throwable {
+        if (INDY_call280 != null) return INDY_call280;
+        CallSite cs = (CallSite) MH_bootstrap280 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap280 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper280 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call280 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap280 (Object l, Object n, Object t) throws Throwable { return _mh[ 280 ].invokeExact(l, n, t); }
+
+    // 281
+    private static MethodType MT_bootstrap281 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap281 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap281", MT_bootstrap281 ());
+    }
+
+    private static MethodHandle INDY_call281;
+    private static MethodHandle INDY_call281 () throws Throwable {
+        if (INDY_call281 != null) return INDY_call281;
+        CallSite cs = (CallSite) MH_bootstrap281 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap281 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper281 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call281 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap281 (Object l, Object n, Object t) throws Throwable { return _mh[ 281 ].invokeExact(l, n, t); }
+
+    // 282
+    private static MethodType MT_bootstrap282 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap282 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap282", MT_bootstrap282 ());
+    }
+
+    private static MethodHandle INDY_call282;
+    private static MethodHandle INDY_call282 () throws Throwable {
+        if (INDY_call282 != null) return INDY_call282;
+        CallSite cs = (CallSite) MH_bootstrap282 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap282 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper282 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call282 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap282 (Object l, Object n, Object t) throws Throwable { return _mh[ 282 ].invokeExact(l, n, t); }
+
+    // 283
+    private static MethodType MT_bootstrap283 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap283 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap283", MT_bootstrap283 ());
+    }
+
+    private static MethodHandle INDY_call283;
+    private static MethodHandle INDY_call283 () throws Throwable {
+        if (INDY_call283 != null) return INDY_call283;
+        CallSite cs = (CallSite) MH_bootstrap283 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap283 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper283 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call283 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap283 (Object l, Object n, Object t) throws Throwable { return _mh[ 283 ].invokeExact(l, n, t); }
+
+    // 284
+    private static MethodType MT_bootstrap284 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap284 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap284", MT_bootstrap284 ());
+    }
+
+    private static MethodHandle INDY_call284;
+    private static MethodHandle INDY_call284 () throws Throwable {
+        if (INDY_call284 != null) return INDY_call284;
+        CallSite cs = (CallSite) MH_bootstrap284 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap284 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper284 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call284 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap284 (Object l, Object n, Object t) throws Throwable { return _mh[ 284 ].invokeExact(l, n, t); }
+
+    // 285
+    private static MethodType MT_bootstrap285 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap285 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap285", MT_bootstrap285 ());
+    }
+
+    private static MethodHandle INDY_call285;
+    private static MethodHandle INDY_call285 () throws Throwable {
+        if (INDY_call285 != null) return INDY_call285;
+        CallSite cs = (CallSite) MH_bootstrap285 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap285 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper285 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call285 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap285 (Object l, Object n, Object t) throws Throwable { return _mh[ 285 ].invokeExact(l, n, t); }
+
+    // 286
+    private static MethodType MT_bootstrap286 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap286 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap286", MT_bootstrap286 ());
+    }
+
+    private static MethodHandle INDY_call286;
+    private static MethodHandle INDY_call286 () throws Throwable {
+        if (INDY_call286 != null) return INDY_call286;
+        CallSite cs = (CallSite) MH_bootstrap286 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap286 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper286 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call286 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap286 (Object l, Object n, Object t) throws Throwable { return _mh[ 286 ].invokeExact(l, n, t); }
+
+    // 287
+    private static MethodType MT_bootstrap287 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap287 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap287", MT_bootstrap287 ());
+    }
+
+    private static MethodHandle INDY_call287;
+    private static MethodHandle INDY_call287 () throws Throwable {
+        if (INDY_call287 != null) return INDY_call287;
+        CallSite cs = (CallSite) MH_bootstrap287 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap287 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper287 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call287 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap287 (Object l, Object n, Object t) throws Throwable { return _mh[ 287 ].invokeExact(l, n, t); }
+
+    // 288
+    private static MethodType MT_bootstrap288 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap288 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap288", MT_bootstrap288 ());
+    }
+
+    private static MethodHandle INDY_call288;
+    private static MethodHandle INDY_call288 () throws Throwable {
+        if (INDY_call288 != null) return INDY_call288;
+        CallSite cs = (CallSite) MH_bootstrap288 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap288 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper288 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call288 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap288 (Object l, Object n, Object t) throws Throwable { return _mh[ 288 ].invokeExact(l, n, t); }
+
+    // 289
+    private static MethodType MT_bootstrap289 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap289 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap289", MT_bootstrap289 ());
+    }
+
+    private static MethodHandle INDY_call289;
+    private static MethodHandle INDY_call289 () throws Throwable {
+        if (INDY_call289 != null) return INDY_call289;
+        CallSite cs = (CallSite) MH_bootstrap289 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap289 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper289 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call289 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap289 (Object l, Object n, Object t) throws Throwable { return _mh[ 289 ].invokeExact(l, n, t); }
+
+    // 290
+    private static MethodType MT_bootstrap290 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap290 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap290", MT_bootstrap290 ());
+    }
+
+    private static MethodHandle INDY_call290;
+    private static MethodHandle INDY_call290 () throws Throwable {
+        if (INDY_call290 != null) return INDY_call290;
+        CallSite cs = (CallSite) MH_bootstrap290 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap290 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper290 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call290 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap290 (Object l, Object n, Object t) throws Throwable { return _mh[ 290 ].invokeExact(l, n, t); }
+
+    // 291
+    private static MethodType MT_bootstrap291 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap291 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap291", MT_bootstrap291 ());
+    }
+
+    private static MethodHandle INDY_call291;
+    private static MethodHandle INDY_call291 () throws Throwable {
+        if (INDY_call291 != null) return INDY_call291;
+        CallSite cs = (CallSite) MH_bootstrap291 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap291 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper291 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call291 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap291 (Object l, Object n, Object t) throws Throwable { return _mh[ 291 ].invokeExact(l, n, t); }
+
+    // 292
+    private static MethodType MT_bootstrap292 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap292 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap292", MT_bootstrap292 ());
+    }
+
+    private static MethodHandle INDY_call292;
+    private static MethodHandle INDY_call292 () throws Throwable {
+        if (INDY_call292 != null) return INDY_call292;
+        CallSite cs = (CallSite) MH_bootstrap292 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap292 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper292 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call292 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap292 (Object l, Object n, Object t) throws Throwable { return _mh[ 292 ].invokeExact(l, n, t); }
+
+    // 293
+    private static MethodType MT_bootstrap293 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap293 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap293", MT_bootstrap293 ());
+    }
+
+    private static MethodHandle INDY_call293;
+    private static MethodHandle INDY_call293 () throws Throwable {
+        if (INDY_call293 != null) return INDY_call293;
+        CallSite cs = (CallSite) MH_bootstrap293 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap293 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper293 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call293 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap293 (Object l, Object n, Object t) throws Throwable { return _mh[ 293 ].invokeExact(l, n, t); }
+
+    // 294
+    private static MethodType MT_bootstrap294 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap294 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap294", MT_bootstrap294 ());
+    }
+
+    private static MethodHandle INDY_call294;
+    private static MethodHandle INDY_call294 () throws Throwable {
+        if (INDY_call294 != null) return INDY_call294;
+        CallSite cs = (CallSite) MH_bootstrap294 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap294 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper294 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call294 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap294 (Object l, Object n, Object t) throws Throwable { return _mh[ 294 ].invokeExact(l, n, t); }
+
+    // 295
+    private static MethodType MT_bootstrap295 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap295 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap295", MT_bootstrap295 ());
+    }
+
+    private static MethodHandle INDY_call295;
+    private static MethodHandle INDY_call295 () throws Throwable {
+        if (INDY_call295 != null) return INDY_call295;
+        CallSite cs = (CallSite) MH_bootstrap295 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap295 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper295 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call295 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap295 (Object l, Object n, Object t) throws Throwable { return _mh[ 295 ].invokeExact(l, n, t); }
+
+    // 296
+    private static MethodType MT_bootstrap296 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap296 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap296", MT_bootstrap296 ());
+    }
+
+    private static MethodHandle INDY_call296;
+    private static MethodHandle INDY_call296 () throws Throwable {
+        if (INDY_call296 != null) return INDY_call296;
+        CallSite cs = (CallSite) MH_bootstrap296 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap296 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper296 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call296 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap296 (Object l, Object n, Object t) throws Throwable { return _mh[ 296 ].invokeExact(l, n, t); }
+
+    // 297
+    private static MethodType MT_bootstrap297 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap297 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap297", MT_bootstrap297 ());
+    }
+
+    private static MethodHandle INDY_call297;
+    private static MethodHandle INDY_call297 () throws Throwable {
+        if (INDY_call297 != null) return INDY_call297;
+        CallSite cs = (CallSite) MH_bootstrap297 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap297 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper297 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call297 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap297 (Object l, Object n, Object t) throws Throwable { return _mh[ 297 ].invokeExact(l, n, t); }
+
+    // 298
+    private static MethodType MT_bootstrap298 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap298 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap298", MT_bootstrap298 ());
+    }
+
+    private static MethodHandle INDY_call298;
+    private static MethodHandle INDY_call298 () throws Throwable {
+        if (INDY_call298 != null) return INDY_call298;
+        CallSite cs = (CallSite) MH_bootstrap298 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap298 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper298 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call298 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap298 (Object l, Object n, Object t) throws Throwable { return _mh[ 298 ].invokeExact(l, n, t); }
+
+    // 299
+    private static MethodType MT_bootstrap299 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap299 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap299", MT_bootstrap299 ());
+    }
+
+    private static MethodHandle INDY_call299;
+    private static MethodHandle INDY_call299 () throws Throwable {
+        if (INDY_call299 != null) return INDY_call299;
+        CallSite cs = (CallSite) MH_bootstrap299 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap299 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper299 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call299 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap299 (Object l, Object n, Object t) throws Throwable { return _mh[ 299 ].invokeExact(l, n, t); }
+
+    // 300
+    private static MethodType MT_bootstrap300 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap300 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap300", MT_bootstrap300 ());
+    }
+
+    private static MethodHandle INDY_call300;
+    private static MethodHandle INDY_call300 () throws Throwable {
+        if (INDY_call300 != null) return INDY_call300;
+        CallSite cs = (CallSite) MH_bootstrap300 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap300 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper300 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call300 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap300 (Object l, Object n, Object t) throws Throwable { return _mh[ 300 ].invokeExact(l, n, t); }
+
+    // 301
+    private static MethodType MT_bootstrap301 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap301 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap301", MT_bootstrap301 ());
+    }
+
+    private static MethodHandle INDY_call301;
+    private static MethodHandle INDY_call301 () throws Throwable {
+        if (INDY_call301 != null) return INDY_call301;
+        CallSite cs = (CallSite) MH_bootstrap301 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap301 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper301 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call301 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap301 (Object l, Object n, Object t) throws Throwable { return _mh[ 301 ].invokeExact(l, n, t); }
+
+    // 302
+    private static MethodType MT_bootstrap302 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap302 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap302", MT_bootstrap302 ());
+    }
+
+    private static MethodHandle INDY_call302;
+    private static MethodHandle INDY_call302 () throws Throwable {
+        if (INDY_call302 != null) return INDY_call302;
+        CallSite cs = (CallSite) MH_bootstrap302 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap302 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper302 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call302 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap302 (Object l, Object n, Object t) throws Throwable { return _mh[ 302 ].invokeExact(l, n, t); }
+
+    // 303
+    private static MethodType MT_bootstrap303 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap303 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap303", MT_bootstrap303 ());
+    }
+
+    private static MethodHandle INDY_call303;
+    private static MethodHandle INDY_call303 () throws Throwable {
+        if (INDY_call303 != null) return INDY_call303;
+        CallSite cs = (CallSite) MH_bootstrap303 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap303 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper303 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call303 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap303 (Object l, Object n, Object t) throws Throwable { return _mh[ 303 ].invokeExact(l, n, t); }
+
+    // 304
+    private static MethodType MT_bootstrap304 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap304 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap304", MT_bootstrap304 ());
+    }
+
+    private static MethodHandle INDY_call304;
+    private static MethodHandle INDY_call304 () throws Throwable {
+        if (INDY_call304 != null) return INDY_call304;
+        CallSite cs = (CallSite) MH_bootstrap304 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap304 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper304 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call304 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap304 (Object l, Object n, Object t) throws Throwable { return _mh[ 304 ].invokeExact(l, n, t); }
+
+    // 305
+    private static MethodType MT_bootstrap305 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap305 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap305", MT_bootstrap305 ());
+    }
+
+    private static MethodHandle INDY_call305;
+    private static MethodHandle INDY_call305 () throws Throwable {
+        if (INDY_call305 != null) return INDY_call305;
+        CallSite cs = (CallSite) MH_bootstrap305 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap305 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper305 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call305 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap305 (Object l, Object n, Object t) throws Throwable { return _mh[ 305 ].invokeExact(l, n, t); }
+
+    // 306
+    private static MethodType MT_bootstrap306 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap306 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap306", MT_bootstrap306 ());
+    }
+
+    private static MethodHandle INDY_call306;
+    private static MethodHandle INDY_call306 () throws Throwable {
+        if (INDY_call306 != null) return INDY_call306;
+        CallSite cs = (CallSite) MH_bootstrap306 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap306 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper306 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call306 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap306 (Object l, Object n, Object t) throws Throwable { return _mh[ 306 ].invokeExact(l, n, t); }
+
+    // 307
+    private static MethodType MT_bootstrap307 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap307 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap307", MT_bootstrap307 ());
+    }
+
+    private static MethodHandle INDY_call307;
+    private static MethodHandle INDY_call307 () throws Throwable {
+        if (INDY_call307 != null) return INDY_call307;
+        CallSite cs = (CallSite) MH_bootstrap307 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap307 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper307 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call307 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap307 (Object l, Object n, Object t) throws Throwable { return _mh[ 307 ].invokeExact(l, n, t); }
+
+    // 308
+    private static MethodType MT_bootstrap308 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap308 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap308", MT_bootstrap308 ());
+    }
+
+    private static MethodHandle INDY_call308;
+    private static MethodHandle INDY_call308 () throws Throwable {
+        if (INDY_call308 != null) return INDY_call308;
+        CallSite cs = (CallSite) MH_bootstrap308 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap308 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper308 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call308 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap308 (Object l, Object n, Object t) throws Throwable { return _mh[ 308 ].invokeExact(l, n, t); }
+
+    // 309
+    private static MethodType MT_bootstrap309 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap309 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap309", MT_bootstrap309 ());
+    }
+
+    private static MethodHandle INDY_call309;
+    private static MethodHandle INDY_call309 () throws Throwable {
+        if (INDY_call309 != null) return INDY_call309;
+        CallSite cs = (CallSite) MH_bootstrap309 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap309 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper309 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call309 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap309 (Object l, Object n, Object t) throws Throwable { return _mh[ 309 ].invokeExact(l, n, t); }
+
+    // 310
+    private static MethodType MT_bootstrap310 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap310 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap310", MT_bootstrap310 ());
+    }
+
+    private static MethodHandle INDY_call310;
+    private static MethodHandle INDY_call310 () throws Throwable {
+        if (INDY_call310 != null) return INDY_call310;
+        CallSite cs = (CallSite) MH_bootstrap310 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap310 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper310 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call310 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap310 (Object l, Object n, Object t) throws Throwable { return _mh[ 310 ].invokeExact(l, n, t); }
+
+    // 311
+    private static MethodType MT_bootstrap311 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap311 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap311", MT_bootstrap311 ());
+    }
+
+    private static MethodHandle INDY_call311;
+    private static MethodHandle INDY_call311 () throws Throwable {
+        if (INDY_call311 != null) return INDY_call311;
+        CallSite cs = (CallSite) MH_bootstrap311 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap311 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper311 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call311 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap311 (Object l, Object n, Object t) throws Throwable { return _mh[ 311 ].invokeExact(l, n, t); }
+
+    // 312
+    private static MethodType MT_bootstrap312 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap312 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap312", MT_bootstrap312 ());
+    }
+
+    private static MethodHandle INDY_call312;
+    private static MethodHandle INDY_call312 () throws Throwable {
+        if (INDY_call312 != null) return INDY_call312;
+        CallSite cs = (CallSite) MH_bootstrap312 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap312 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper312 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call312 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap312 (Object l, Object n, Object t) throws Throwable { return _mh[ 312 ].invokeExact(l, n, t); }
+
+    // 313
+    private static MethodType MT_bootstrap313 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap313 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap313", MT_bootstrap313 ());
+    }
+
+    private static MethodHandle INDY_call313;
+    private static MethodHandle INDY_call313 () throws Throwable {
+        if (INDY_call313 != null) return INDY_call313;
+        CallSite cs = (CallSite) MH_bootstrap313 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap313 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper313 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call313 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap313 (Object l, Object n, Object t) throws Throwable { return _mh[ 313 ].invokeExact(l, n, t); }
+
+    // 314
+    private static MethodType MT_bootstrap314 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap314 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap314", MT_bootstrap314 ());
+    }
+
+    private static MethodHandle INDY_call314;
+    private static MethodHandle INDY_call314 () throws Throwable {
+        if (INDY_call314 != null) return INDY_call314;
+        CallSite cs = (CallSite) MH_bootstrap314 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap314 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper314 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call314 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap314 (Object l, Object n, Object t) throws Throwable { return _mh[ 314 ].invokeExact(l, n, t); }
+
+    // 315
+    private static MethodType MT_bootstrap315 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap315 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap315", MT_bootstrap315 ());
+    }
+
+    private static MethodHandle INDY_call315;
+    private static MethodHandle INDY_call315 () throws Throwable {
+        if (INDY_call315 != null) return INDY_call315;
+        CallSite cs = (CallSite) MH_bootstrap315 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap315 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper315 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call315 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap315 (Object l, Object n, Object t) throws Throwable { return _mh[ 315 ].invokeExact(l, n, t); }
+
+    // 316
+    private static MethodType MT_bootstrap316 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap316 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap316", MT_bootstrap316 ());
+    }
+
+    private static MethodHandle INDY_call316;
+    private static MethodHandle INDY_call316 () throws Throwable {
+        if (INDY_call316 != null) return INDY_call316;
+        CallSite cs = (CallSite) MH_bootstrap316 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap316 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper316 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call316 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap316 (Object l, Object n, Object t) throws Throwable { return _mh[ 316 ].invokeExact(l, n, t); }
+
+    // 317
+    private static MethodType MT_bootstrap317 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap317 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap317", MT_bootstrap317 ());
+    }
+
+    private static MethodHandle INDY_call317;
+    private static MethodHandle INDY_call317 () throws Throwable {
+        if (INDY_call317 != null) return INDY_call317;
+        CallSite cs = (CallSite) MH_bootstrap317 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap317 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper317 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call317 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap317 (Object l, Object n, Object t) throws Throwable { return _mh[ 317 ].invokeExact(l, n, t); }
+
+    // 318
+    private static MethodType MT_bootstrap318 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap318 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap318", MT_bootstrap318 ());
+    }
+
+    private static MethodHandle INDY_call318;
+    private static MethodHandle INDY_call318 () throws Throwable {
+        if (INDY_call318 != null) return INDY_call318;
+        CallSite cs = (CallSite) MH_bootstrap318 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap318 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper318 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call318 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap318 (Object l, Object n, Object t) throws Throwable { return _mh[ 318 ].invokeExact(l, n, t); }
+
+    // 319
+    private static MethodType MT_bootstrap319 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap319 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap319", MT_bootstrap319 ());
+    }
+
+    private static MethodHandle INDY_call319;
+    private static MethodHandle INDY_call319 () throws Throwable {
+        if (INDY_call319 != null) return INDY_call319;
+        CallSite cs = (CallSite) MH_bootstrap319 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap319 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper319 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call319 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap319 (Object l, Object n, Object t) throws Throwable { return _mh[ 319 ].invokeExact(l, n, t); }
+
+    // 320
+    private static MethodType MT_bootstrap320 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap320 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap320", MT_bootstrap320 ());
+    }
+
+    private static MethodHandle INDY_call320;
+    private static MethodHandle INDY_call320 () throws Throwable {
+        if (INDY_call320 != null) return INDY_call320;
+        CallSite cs = (CallSite) MH_bootstrap320 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap320 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper320 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call320 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap320 (Object l, Object n, Object t) throws Throwable { return _mh[ 320 ].invokeExact(l, n, t); }
+
+    // 321
+    private static MethodType MT_bootstrap321 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap321 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap321", MT_bootstrap321 ());
+    }
+
+    private static MethodHandle INDY_call321;
+    private static MethodHandle INDY_call321 () throws Throwable {
+        if (INDY_call321 != null) return INDY_call321;
+        CallSite cs = (CallSite) MH_bootstrap321 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap321 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper321 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call321 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap321 (Object l, Object n, Object t) throws Throwable { return _mh[ 321 ].invokeExact(l, n, t); }
+
+    // 322
+    private static MethodType MT_bootstrap322 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap322 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap322", MT_bootstrap322 ());
+    }
+
+    private static MethodHandle INDY_call322;
+    private static MethodHandle INDY_call322 () throws Throwable {
+        if (INDY_call322 != null) return INDY_call322;
+        CallSite cs = (CallSite) MH_bootstrap322 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap322 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper322 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call322 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap322 (Object l, Object n, Object t) throws Throwable { return _mh[ 322 ].invokeExact(l, n, t); }
+
+    // 323
+    private static MethodType MT_bootstrap323 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap323 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap323", MT_bootstrap323 ());
+    }
+
+    private static MethodHandle INDY_call323;
+    private static MethodHandle INDY_call323 () throws Throwable {
+        if (INDY_call323 != null) return INDY_call323;
+        CallSite cs = (CallSite) MH_bootstrap323 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap323 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper323 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call323 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap323 (Object l, Object n, Object t) throws Throwable { return _mh[ 323 ].invokeExact(l, n, t); }
+
+    // 324
+    private static MethodType MT_bootstrap324 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap324 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap324", MT_bootstrap324 ());
+    }
+
+    private static MethodHandle INDY_call324;
+    private static MethodHandle INDY_call324 () throws Throwable {
+        if (INDY_call324 != null) return INDY_call324;
+        CallSite cs = (CallSite) MH_bootstrap324 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap324 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper324 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call324 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap324 (Object l, Object n, Object t) throws Throwable { return _mh[ 324 ].invokeExact(l, n, t); }
+
+    // 325
+    private static MethodType MT_bootstrap325 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap325 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap325", MT_bootstrap325 ());
+    }
+
+    private static MethodHandle INDY_call325;
+    private static MethodHandle INDY_call325 () throws Throwable {
+        if (INDY_call325 != null) return INDY_call325;
+        CallSite cs = (CallSite) MH_bootstrap325 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap325 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper325 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call325 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap325 (Object l, Object n, Object t) throws Throwable { return _mh[ 325 ].invokeExact(l, n, t); }
+
+    // 326
+    private static MethodType MT_bootstrap326 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap326 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap326", MT_bootstrap326 ());
+    }
+
+    private static MethodHandle INDY_call326;
+    private static MethodHandle INDY_call326 () throws Throwable {
+        if (INDY_call326 != null) return INDY_call326;
+        CallSite cs = (CallSite) MH_bootstrap326 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap326 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper326 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call326 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap326 (Object l, Object n, Object t) throws Throwable { return _mh[ 326 ].invokeExact(l, n, t); }
+
+    // 327
+    private static MethodType MT_bootstrap327 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap327 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap327", MT_bootstrap327 ());
+    }
+
+    private static MethodHandle INDY_call327;
+    private static MethodHandle INDY_call327 () throws Throwable {
+        if (INDY_call327 != null) return INDY_call327;
+        CallSite cs = (CallSite) MH_bootstrap327 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap327 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper327 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call327 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap327 (Object l, Object n, Object t) throws Throwable { return _mh[ 327 ].invokeExact(l, n, t); }
+
+    // 328
+    private static MethodType MT_bootstrap328 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap328 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap328", MT_bootstrap328 ());
+    }
+
+    private static MethodHandle INDY_call328;
+    private static MethodHandle INDY_call328 () throws Throwable {
+        if (INDY_call328 != null) return INDY_call328;
+        CallSite cs = (CallSite) MH_bootstrap328 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap328 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper328 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call328 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap328 (Object l, Object n, Object t) throws Throwable { return _mh[ 328 ].invokeExact(l, n, t); }
+
+    // 329
+    private static MethodType MT_bootstrap329 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap329 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap329", MT_bootstrap329 ());
+    }
+
+    private static MethodHandle INDY_call329;
+    private static MethodHandle INDY_call329 () throws Throwable {
+        if (INDY_call329 != null) return INDY_call329;
+        CallSite cs = (CallSite) MH_bootstrap329 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap329 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper329 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call329 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap329 (Object l, Object n, Object t) throws Throwable { return _mh[ 329 ].invokeExact(l, n, t); }
+
+    // 330
+    private static MethodType MT_bootstrap330 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap330 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap330", MT_bootstrap330 ());
+    }
+
+    private static MethodHandle INDY_call330;
+    private static MethodHandle INDY_call330 () throws Throwable {
+        if (INDY_call330 != null) return INDY_call330;
+        CallSite cs = (CallSite) MH_bootstrap330 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap330 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper330 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call330 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap330 (Object l, Object n, Object t) throws Throwable { return _mh[ 330 ].invokeExact(l, n, t); }
+
+    // 331
+    private static MethodType MT_bootstrap331 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap331 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap331", MT_bootstrap331 ());
+    }
+
+    private static MethodHandle INDY_call331;
+    private static MethodHandle INDY_call331 () throws Throwable {
+        if (INDY_call331 != null) return INDY_call331;
+        CallSite cs = (CallSite) MH_bootstrap331 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap331 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper331 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call331 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap331 (Object l, Object n, Object t) throws Throwable { return _mh[ 331 ].invokeExact(l, n, t); }
+
+    // 332
+    private static MethodType MT_bootstrap332 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap332 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap332", MT_bootstrap332 ());
+    }
+
+    private static MethodHandle INDY_call332;
+    private static MethodHandle INDY_call332 () throws Throwable {
+        if (INDY_call332 != null) return INDY_call332;
+        CallSite cs = (CallSite) MH_bootstrap332 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap332 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper332 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call332 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap332 (Object l, Object n, Object t) throws Throwable { return _mh[ 332 ].invokeExact(l, n, t); }
+
+    // 333
+    private static MethodType MT_bootstrap333 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap333 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap333", MT_bootstrap333 ());
+    }
+
+    private static MethodHandle INDY_call333;
+    private static MethodHandle INDY_call333 () throws Throwable {
+        if (INDY_call333 != null) return INDY_call333;
+        CallSite cs = (CallSite) MH_bootstrap333 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap333 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper333 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call333 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap333 (Object l, Object n, Object t) throws Throwable { return _mh[ 333 ].invokeExact(l, n, t); }
+
+    // 334
+    private static MethodType MT_bootstrap334 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap334 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap334", MT_bootstrap334 ());
+    }
+
+    private static MethodHandle INDY_call334;
+    private static MethodHandle INDY_call334 () throws Throwable {
+        if (INDY_call334 != null) return INDY_call334;
+        CallSite cs = (CallSite) MH_bootstrap334 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap334 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper334 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call334 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap334 (Object l, Object n, Object t) throws Throwable { return _mh[ 334 ].invokeExact(l, n, t); }
+
+    // 335
+    private static MethodType MT_bootstrap335 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap335 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap335", MT_bootstrap335 ());
+    }
+
+    private static MethodHandle INDY_call335;
+    private static MethodHandle INDY_call335 () throws Throwable {
+        if (INDY_call335 != null) return INDY_call335;
+        CallSite cs = (CallSite) MH_bootstrap335 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap335 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper335 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call335 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap335 (Object l, Object n, Object t) throws Throwable { return _mh[ 335 ].invokeExact(l, n, t); }
+
+    // 336
+    private static MethodType MT_bootstrap336 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap336 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap336", MT_bootstrap336 ());
+    }
+
+    private static MethodHandle INDY_call336;
+    private static MethodHandle INDY_call336 () throws Throwable {
+        if (INDY_call336 != null) return INDY_call336;
+        CallSite cs = (CallSite) MH_bootstrap336 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap336 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper336 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call336 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap336 (Object l, Object n, Object t) throws Throwable { return _mh[ 336 ].invokeExact(l, n, t); }
+
+    // 337
+    private static MethodType MT_bootstrap337 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap337 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap337", MT_bootstrap337 ());
+    }
+
+    private static MethodHandle INDY_call337;
+    private static MethodHandle INDY_call337 () throws Throwable {
+        if (INDY_call337 != null) return INDY_call337;
+        CallSite cs = (CallSite) MH_bootstrap337 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap337 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper337 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call337 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap337 (Object l, Object n, Object t) throws Throwable { return _mh[ 337 ].invokeExact(l, n, t); }
+
+    // 338
+    private static MethodType MT_bootstrap338 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap338 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap338", MT_bootstrap338 ());
+    }
+
+    private static MethodHandle INDY_call338;
+    private static MethodHandle INDY_call338 () throws Throwable {
+        if (INDY_call338 != null) return INDY_call338;
+        CallSite cs = (CallSite) MH_bootstrap338 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap338 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper338 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call338 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap338 (Object l, Object n, Object t) throws Throwable { return _mh[ 338 ].invokeExact(l, n, t); }
+
+    // 339
+    private static MethodType MT_bootstrap339 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap339 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap339", MT_bootstrap339 ());
+    }
+
+    private static MethodHandle INDY_call339;
+    private static MethodHandle INDY_call339 () throws Throwable {
+        if (INDY_call339 != null) return INDY_call339;
+        CallSite cs = (CallSite) MH_bootstrap339 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap339 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper339 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call339 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap339 (Object l, Object n, Object t) throws Throwable { return _mh[ 339 ].invokeExact(l, n, t); }
+
+    // 340
+    private static MethodType MT_bootstrap340 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap340 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap340", MT_bootstrap340 ());
+    }
+
+    private static MethodHandle INDY_call340;
+    private static MethodHandle INDY_call340 () throws Throwable {
+        if (INDY_call340 != null) return INDY_call340;
+        CallSite cs = (CallSite) MH_bootstrap340 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap340 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper340 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call340 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap340 (Object l, Object n, Object t) throws Throwable { return _mh[ 340 ].invokeExact(l, n, t); }
+
+    // 341
+    private static MethodType MT_bootstrap341 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap341 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap341", MT_bootstrap341 ());
+    }
+
+    private static MethodHandle INDY_call341;
+    private static MethodHandle INDY_call341 () throws Throwable {
+        if (INDY_call341 != null) return INDY_call341;
+        CallSite cs = (CallSite) MH_bootstrap341 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap341 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper341 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call341 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap341 (Object l, Object n, Object t) throws Throwable { return _mh[ 341 ].invokeExact(l, n, t); }
+
+    // 342
+    private static MethodType MT_bootstrap342 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap342 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap342", MT_bootstrap342 ());
+    }
+
+    private static MethodHandle INDY_call342;
+    private static MethodHandle INDY_call342 () throws Throwable {
+        if (INDY_call342 != null) return INDY_call342;
+        CallSite cs = (CallSite) MH_bootstrap342 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap342 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper342 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call342 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap342 (Object l, Object n, Object t) throws Throwable { return _mh[ 342 ].invokeExact(l, n, t); }
+
+    // 343
+    private static MethodType MT_bootstrap343 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap343 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap343", MT_bootstrap343 ());
+    }
+
+    private static MethodHandle INDY_call343;
+    private static MethodHandle INDY_call343 () throws Throwable {
+        if (INDY_call343 != null) return INDY_call343;
+        CallSite cs = (CallSite) MH_bootstrap343 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap343 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper343 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call343 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap343 (Object l, Object n, Object t) throws Throwable { return _mh[ 343 ].invokeExact(l, n, t); }
+
+    // 344
+    private static MethodType MT_bootstrap344 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap344 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap344", MT_bootstrap344 ());
+    }
+
+    private static MethodHandle INDY_call344;
+    private static MethodHandle INDY_call344 () throws Throwable {
+        if (INDY_call344 != null) return INDY_call344;
+        CallSite cs = (CallSite) MH_bootstrap344 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap344 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper344 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call344 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap344 (Object l, Object n, Object t) throws Throwable { return _mh[ 344 ].invokeExact(l, n, t); }
+
+    // 345
+    private static MethodType MT_bootstrap345 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap345 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap345", MT_bootstrap345 ());
+    }
+
+    private static MethodHandle INDY_call345;
+    private static MethodHandle INDY_call345 () throws Throwable {
+        if (INDY_call345 != null) return INDY_call345;
+        CallSite cs = (CallSite) MH_bootstrap345 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap345 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper345 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call345 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap345 (Object l, Object n, Object t) throws Throwable { return _mh[ 345 ].invokeExact(l, n, t); }
+
+    // 346
+    private static MethodType MT_bootstrap346 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap346 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap346", MT_bootstrap346 ());
+    }
+
+    private static MethodHandle INDY_call346;
+    private static MethodHandle INDY_call346 () throws Throwable {
+        if (INDY_call346 != null) return INDY_call346;
+        CallSite cs = (CallSite) MH_bootstrap346 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap346 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper346 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call346 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap346 (Object l, Object n, Object t) throws Throwable { return _mh[ 346 ].invokeExact(l, n, t); }
+
+    // 347
+    private static MethodType MT_bootstrap347 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap347 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap347", MT_bootstrap347 ());
+    }
+
+    private static MethodHandle INDY_call347;
+    private static MethodHandle INDY_call347 () throws Throwable {
+        if (INDY_call347 != null) return INDY_call347;
+        CallSite cs = (CallSite) MH_bootstrap347 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap347 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper347 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call347 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap347 (Object l, Object n, Object t) throws Throwable { return _mh[ 347 ].invokeExact(l, n, t); }
+
+    // 348
+    private static MethodType MT_bootstrap348 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap348 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap348", MT_bootstrap348 ());
+    }
+
+    private static MethodHandle INDY_call348;
+    private static MethodHandle INDY_call348 () throws Throwable {
+        if (INDY_call348 != null) return INDY_call348;
+        CallSite cs = (CallSite) MH_bootstrap348 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap348 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper348 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call348 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap348 (Object l, Object n, Object t) throws Throwable { return _mh[ 348 ].invokeExact(l, n, t); }
+
+    // 349
+    private static MethodType MT_bootstrap349 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap349 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap349", MT_bootstrap349 ());
+    }
+
+    private static MethodHandle INDY_call349;
+    private static MethodHandle INDY_call349 () throws Throwable {
+        if (INDY_call349 != null) return INDY_call349;
+        CallSite cs = (CallSite) MH_bootstrap349 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap349 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper349 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call349 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap349 (Object l, Object n, Object t) throws Throwable { return _mh[ 349 ].invokeExact(l, n, t); }
+
+    // 350
+    private static MethodType MT_bootstrap350 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap350 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap350", MT_bootstrap350 ());
+    }
+
+    private static MethodHandle INDY_call350;
+    private static MethodHandle INDY_call350 () throws Throwable {
+        if (INDY_call350 != null) return INDY_call350;
+        CallSite cs = (CallSite) MH_bootstrap350 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap350 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper350 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call350 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap350 (Object l, Object n, Object t) throws Throwable { return _mh[ 350 ].invokeExact(l, n, t); }
+
+    // 351
+    private static MethodType MT_bootstrap351 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap351 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap351", MT_bootstrap351 ());
+    }
+
+    private static MethodHandle INDY_call351;
+    private static MethodHandle INDY_call351 () throws Throwable {
+        if (INDY_call351 != null) return INDY_call351;
+        CallSite cs = (CallSite) MH_bootstrap351 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap351 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper351 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call351 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap351 (Object l, Object n, Object t) throws Throwable { return _mh[ 351 ].invokeExact(l, n, t); }
+
+    // 352
+    private static MethodType MT_bootstrap352 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap352 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap352", MT_bootstrap352 ());
+    }
+
+    private static MethodHandle INDY_call352;
+    private static MethodHandle INDY_call352 () throws Throwable {
+        if (INDY_call352 != null) return INDY_call352;
+        CallSite cs = (CallSite) MH_bootstrap352 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap352 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper352 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call352 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap352 (Object l, Object n, Object t) throws Throwable { return _mh[ 352 ].invokeExact(l, n, t); }
+
+    // 353
+    private static MethodType MT_bootstrap353 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap353 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap353", MT_bootstrap353 ());
+    }
+
+    private static MethodHandle INDY_call353;
+    private static MethodHandle INDY_call353 () throws Throwable {
+        if (INDY_call353 != null) return INDY_call353;
+        CallSite cs = (CallSite) MH_bootstrap353 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap353 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper353 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call353 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap353 (Object l, Object n, Object t) throws Throwable { return _mh[ 353 ].invokeExact(l, n, t); }
+
+    // 354
+    private static MethodType MT_bootstrap354 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap354 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap354", MT_bootstrap354 ());
+    }
+
+    private static MethodHandle INDY_call354;
+    private static MethodHandle INDY_call354 () throws Throwable {
+        if (INDY_call354 != null) return INDY_call354;
+        CallSite cs = (CallSite) MH_bootstrap354 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap354 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper354 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call354 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap354 (Object l, Object n, Object t) throws Throwable { return _mh[ 354 ].invokeExact(l, n, t); }
+
+    // 355
+    private static MethodType MT_bootstrap355 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap355 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap355", MT_bootstrap355 ());
+    }
+
+    private static MethodHandle INDY_call355;
+    private static MethodHandle INDY_call355 () throws Throwable {
+        if (INDY_call355 != null) return INDY_call355;
+        CallSite cs = (CallSite) MH_bootstrap355 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap355 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper355 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call355 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap355 (Object l, Object n, Object t) throws Throwable { return _mh[ 355 ].invokeExact(l, n, t); }
+
+    // 356
+    private static MethodType MT_bootstrap356 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap356 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap356", MT_bootstrap356 ());
+    }
+
+    private static MethodHandle INDY_call356;
+    private static MethodHandle INDY_call356 () throws Throwable {
+        if (INDY_call356 != null) return INDY_call356;
+        CallSite cs = (CallSite) MH_bootstrap356 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap356 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper356 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call356 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap356 (Object l, Object n, Object t) throws Throwable { return _mh[ 356 ].invokeExact(l, n, t); }
+
+    // 357
+    private static MethodType MT_bootstrap357 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap357 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap357", MT_bootstrap357 ());
+    }
+
+    private static MethodHandle INDY_call357;
+    private static MethodHandle INDY_call357 () throws Throwable {
+        if (INDY_call357 != null) return INDY_call357;
+        CallSite cs = (CallSite) MH_bootstrap357 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap357 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper357 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call357 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap357 (Object l, Object n, Object t) throws Throwable { return _mh[ 357 ].invokeExact(l, n, t); }
+
+    // 358
+    private static MethodType MT_bootstrap358 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap358 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap358", MT_bootstrap358 ());
+    }
+
+    private static MethodHandle INDY_call358;
+    private static MethodHandle INDY_call358 () throws Throwable {
+        if (INDY_call358 != null) return INDY_call358;
+        CallSite cs = (CallSite) MH_bootstrap358 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap358 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper358 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call358 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap358 (Object l, Object n, Object t) throws Throwable { return _mh[ 358 ].invokeExact(l, n, t); }
+
+    // 359
+    private static MethodType MT_bootstrap359 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap359 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap359", MT_bootstrap359 ());
+    }
+
+    private static MethodHandle INDY_call359;
+    private static MethodHandle INDY_call359 () throws Throwable {
+        if (INDY_call359 != null) return INDY_call359;
+        CallSite cs = (CallSite) MH_bootstrap359 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap359 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper359 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call359 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap359 (Object l, Object n, Object t) throws Throwable { return _mh[ 359 ].invokeExact(l, n, t); }
+
+    // 360
+    private static MethodType MT_bootstrap360 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap360 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap360", MT_bootstrap360 ());
+    }
+
+    private static MethodHandle INDY_call360;
+    private static MethodHandle INDY_call360 () throws Throwable {
+        if (INDY_call360 != null) return INDY_call360;
+        CallSite cs = (CallSite) MH_bootstrap360 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap360 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper360 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call360 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap360 (Object l, Object n, Object t) throws Throwable { return _mh[ 360 ].invokeExact(l, n, t); }
+
+    // 361
+    private static MethodType MT_bootstrap361 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap361 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap361", MT_bootstrap361 ());
+    }
+
+    private static MethodHandle INDY_call361;
+    private static MethodHandle INDY_call361 () throws Throwable {
+        if (INDY_call361 != null) return INDY_call361;
+        CallSite cs = (CallSite) MH_bootstrap361 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap361 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper361 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call361 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap361 (Object l, Object n, Object t) throws Throwable { return _mh[ 361 ].invokeExact(l, n, t); }
+
+    // 362
+    private static MethodType MT_bootstrap362 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap362 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap362", MT_bootstrap362 ());
+    }
+
+    private static MethodHandle INDY_call362;
+    private static MethodHandle INDY_call362 () throws Throwable {
+        if (INDY_call362 != null) return INDY_call362;
+        CallSite cs = (CallSite) MH_bootstrap362 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap362 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper362 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call362 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap362 (Object l, Object n, Object t) throws Throwable { return _mh[ 362 ].invokeExact(l, n, t); }
+
+    // 363
+    private static MethodType MT_bootstrap363 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap363 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap363", MT_bootstrap363 ());
+    }
+
+    private static MethodHandle INDY_call363;
+    private static MethodHandle INDY_call363 () throws Throwable {
+        if (INDY_call363 != null) return INDY_call363;
+        CallSite cs = (CallSite) MH_bootstrap363 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap363 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper363 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call363 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap363 (Object l, Object n, Object t) throws Throwable { return _mh[ 363 ].invokeExact(l, n, t); }
+
+    // 364
+    private static MethodType MT_bootstrap364 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap364 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap364", MT_bootstrap364 ());
+    }
+
+    private static MethodHandle INDY_call364;
+    private static MethodHandle INDY_call364 () throws Throwable {
+        if (INDY_call364 != null) return INDY_call364;
+        CallSite cs = (CallSite) MH_bootstrap364 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap364 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper364 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call364 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap364 (Object l, Object n, Object t) throws Throwable { return _mh[ 364 ].invokeExact(l, n, t); }
+
+    // 365
+    private static MethodType MT_bootstrap365 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap365 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap365", MT_bootstrap365 ());
+    }
+
+    private static MethodHandle INDY_call365;
+    private static MethodHandle INDY_call365 () throws Throwable {
+        if (INDY_call365 != null) return INDY_call365;
+        CallSite cs = (CallSite) MH_bootstrap365 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap365 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper365 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call365 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap365 (Object l, Object n, Object t) throws Throwable { return _mh[ 365 ].invokeExact(l, n, t); }
+
+    // 366
+    private static MethodType MT_bootstrap366 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap366 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap366", MT_bootstrap366 ());
+    }
+
+    private static MethodHandle INDY_call366;
+    private static MethodHandle INDY_call366 () throws Throwable {
+        if (INDY_call366 != null) return INDY_call366;
+        CallSite cs = (CallSite) MH_bootstrap366 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap366 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper366 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call366 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap366 (Object l, Object n, Object t) throws Throwable { return _mh[ 366 ].invokeExact(l, n, t); }
+
+    // 367
+    private static MethodType MT_bootstrap367 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap367 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap367", MT_bootstrap367 ());
+    }
+
+    private static MethodHandle INDY_call367;
+    private static MethodHandle INDY_call367 () throws Throwable {
+        if (INDY_call367 != null) return INDY_call367;
+        CallSite cs = (CallSite) MH_bootstrap367 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap367 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper367 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call367 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap367 (Object l, Object n, Object t) throws Throwable { return _mh[ 367 ].invokeExact(l, n, t); }
+
+    // 368
+    private static MethodType MT_bootstrap368 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap368 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap368", MT_bootstrap368 ());
+    }
+
+    private static MethodHandle INDY_call368;
+    private static MethodHandle INDY_call368 () throws Throwable {
+        if (INDY_call368 != null) return INDY_call368;
+        CallSite cs = (CallSite) MH_bootstrap368 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap368 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper368 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call368 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap368 (Object l, Object n, Object t) throws Throwable { return _mh[ 368 ].invokeExact(l, n, t); }
+
+    // 369
+    private static MethodType MT_bootstrap369 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap369 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap369", MT_bootstrap369 ());
+    }
+
+    private static MethodHandle INDY_call369;
+    private static MethodHandle INDY_call369 () throws Throwable {
+        if (INDY_call369 != null) return INDY_call369;
+        CallSite cs = (CallSite) MH_bootstrap369 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap369 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper369 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call369 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap369 (Object l, Object n, Object t) throws Throwable { return _mh[ 369 ].invokeExact(l, n, t); }
+
+    // 370
+    private static MethodType MT_bootstrap370 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap370 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap370", MT_bootstrap370 ());
+    }
+
+    private static MethodHandle INDY_call370;
+    private static MethodHandle INDY_call370 () throws Throwable {
+        if (INDY_call370 != null) return INDY_call370;
+        CallSite cs = (CallSite) MH_bootstrap370 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap370 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper370 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call370 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap370 (Object l, Object n, Object t) throws Throwable { return _mh[ 370 ].invokeExact(l, n, t); }
+
+    // 371
+    private static MethodType MT_bootstrap371 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap371 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap371", MT_bootstrap371 ());
+    }
+
+    private static MethodHandle INDY_call371;
+    private static MethodHandle INDY_call371 () throws Throwable {
+        if (INDY_call371 != null) return INDY_call371;
+        CallSite cs = (CallSite) MH_bootstrap371 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap371 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper371 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call371 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap371 (Object l, Object n, Object t) throws Throwable { return _mh[ 371 ].invokeExact(l, n, t); }
+
+    // 372
+    private static MethodType MT_bootstrap372 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap372 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap372", MT_bootstrap372 ());
+    }
+
+    private static MethodHandle INDY_call372;
+    private static MethodHandle INDY_call372 () throws Throwable {
+        if (INDY_call372 != null) return INDY_call372;
+        CallSite cs = (CallSite) MH_bootstrap372 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap372 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper372 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call372 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap372 (Object l, Object n, Object t) throws Throwable { return _mh[ 372 ].invokeExact(l, n, t); }
+
+    // 373
+    private static MethodType MT_bootstrap373 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap373 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap373", MT_bootstrap373 ());
+    }
+
+    private static MethodHandle INDY_call373;
+    private static MethodHandle INDY_call373 () throws Throwable {
+        if (INDY_call373 != null) return INDY_call373;
+        CallSite cs = (CallSite) MH_bootstrap373 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap373 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper373 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call373 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap373 (Object l, Object n, Object t) throws Throwable { return _mh[ 373 ].invokeExact(l, n, t); }
+
+    // 374
+    private static MethodType MT_bootstrap374 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap374 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap374", MT_bootstrap374 ());
+    }
+
+    private static MethodHandle INDY_call374;
+    private static MethodHandle INDY_call374 () throws Throwable {
+        if (INDY_call374 != null) return INDY_call374;
+        CallSite cs = (CallSite) MH_bootstrap374 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap374 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper374 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call374 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap374 (Object l, Object n, Object t) throws Throwable { return _mh[ 374 ].invokeExact(l, n, t); }
+
+    // 375
+    private static MethodType MT_bootstrap375 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap375 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap375", MT_bootstrap375 ());
+    }
+
+    private static MethodHandle INDY_call375;
+    private static MethodHandle INDY_call375 () throws Throwable {
+        if (INDY_call375 != null) return INDY_call375;
+        CallSite cs = (CallSite) MH_bootstrap375 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap375 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper375 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call375 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap375 (Object l, Object n, Object t) throws Throwable { return _mh[ 375 ].invokeExact(l, n, t); }
+
+    // 376
+    private static MethodType MT_bootstrap376 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap376 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap376", MT_bootstrap376 ());
+    }
+
+    private static MethodHandle INDY_call376;
+    private static MethodHandle INDY_call376 () throws Throwable {
+        if (INDY_call376 != null) return INDY_call376;
+        CallSite cs = (CallSite) MH_bootstrap376 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap376 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper376 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call376 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap376 (Object l, Object n, Object t) throws Throwable { return _mh[ 376 ].invokeExact(l, n, t); }
+
+    // 377
+    private static MethodType MT_bootstrap377 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap377 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap377", MT_bootstrap377 ());
+    }
+
+    private static MethodHandle INDY_call377;
+    private static MethodHandle INDY_call377 () throws Throwable {
+        if (INDY_call377 != null) return INDY_call377;
+        CallSite cs = (CallSite) MH_bootstrap377 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap377 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper377 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call377 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap377 (Object l, Object n, Object t) throws Throwable { return _mh[ 377 ].invokeExact(l, n, t); }
+
+    // 378
+    private static MethodType MT_bootstrap378 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap378 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap378", MT_bootstrap378 ());
+    }
+
+    private static MethodHandle INDY_call378;
+    private static MethodHandle INDY_call378 () throws Throwable {
+        if (INDY_call378 != null) return INDY_call378;
+        CallSite cs = (CallSite) MH_bootstrap378 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap378 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper378 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call378 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap378 (Object l, Object n, Object t) throws Throwable { return _mh[ 378 ].invokeExact(l, n, t); }
+
+    // 379
+    private static MethodType MT_bootstrap379 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap379 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap379", MT_bootstrap379 ());
+    }
+
+    private static MethodHandle INDY_call379;
+    private static MethodHandle INDY_call379 () throws Throwable {
+        if (INDY_call379 != null) return INDY_call379;
+        CallSite cs = (CallSite) MH_bootstrap379 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap379 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper379 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call379 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap379 (Object l, Object n, Object t) throws Throwable { return _mh[ 379 ].invokeExact(l, n, t); }
+
+    // 380
+    private static MethodType MT_bootstrap380 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap380 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap380", MT_bootstrap380 ());
+    }
+
+    private static MethodHandle INDY_call380;
+    private static MethodHandle INDY_call380 () throws Throwable {
+        if (INDY_call380 != null) return INDY_call380;
+        CallSite cs = (CallSite) MH_bootstrap380 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap380 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper380 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call380 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap380 (Object l, Object n, Object t) throws Throwable { return _mh[ 380 ].invokeExact(l, n, t); }
+
+    // 381
+    private static MethodType MT_bootstrap381 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap381 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap381", MT_bootstrap381 ());
+    }
+
+    private static MethodHandle INDY_call381;
+    private static MethodHandle INDY_call381 () throws Throwable {
+        if (INDY_call381 != null) return INDY_call381;
+        CallSite cs = (CallSite) MH_bootstrap381 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap381 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper381 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call381 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap381 (Object l, Object n, Object t) throws Throwable { return _mh[ 381 ].invokeExact(l, n, t); }
+
+    // 382
+    private static MethodType MT_bootstrap382 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap382 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap382", MT_bootstrap382 ());
+    }
+
+    private static MethodHandle INDY_call382;
+    private static MethodHandle INDY_call382 () throws Throwable {
+        if (INDY_call382 != null) return INDY_call382;
+        CallSite cs = (CallSite) MH_bootstrap382 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap382 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper382 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call382 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap382 (Object l, Object n, Object t) throws Throwable { return _mh[ 382 ].invokeExact(l, n, t); }
+
+    // 383
+    private static MethodType MT_bootstrap383 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap383 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap383", MT_bootstrap383 ());
+    }
+
+    private static MethodHandle INDY_call383;
+    private static MethodHandle INDY_call383 () throws Throwable {
+        if (INDY_call383 != null) return INDY_call383;
+        CallSite cs = (CallSite) MH_bootstrap383 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap383 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper383 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call383 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap383 (Object l, Object n, Object t) throws Throwable { return _mh[ 383 ].invokeExact(l, n, t); }
+
+    // 384
+    private static MethodType MT_bootstrap384 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap384 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap384", MT_bootstrap384 ());
+    }
+
+    private static MethodHandle INDY_call384;
+    private static MethodHandle INDY_call384 () throws Throwable {
+        if (INDY_call384 != null) return INDY_call384;
+        CallSite cs = (CallSite) MH_bootstrap384 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap384 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper384 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call384 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap384 (Object l, Object n, Object t) throws Throwable { return _mh[ 384 ].invokeExact(l, n, t); }
+
+    // 385
+    private static MethodType MT_bootstrap385 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap385 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap385", MT_bootstrap385 ());
+    }
+
+    private static MethodHandle INDY_call385;
+    private static MethodHandle INDY_call385 () throws Throwable {
+        if (INDY_call385 != null) return INDY_call385;
+        CallSite cs = (CallSite) MH_bootstrap385 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap385 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper385 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call385 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap385 (Object l, Object n, Object t) throws Throwable { return _mh[ 385 ].invokeExact(l, n, t); }
+
+    // 386
+    private static MethodType MT_bootstrap386 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap386 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap386", MT_bootstrap386 ());
+    }
+
+    private static MethodHandle INDY_call386;
+    private static MethodHandle INDY_call386 () throws Throwable {
+        if (INDY_call386 != null) return INDY_call386;
+        CallSite cs = (CallSite) MH_bootstrap386 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap386 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper386 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call386 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap386 (Object l, Object n, Object t) throws Throwable { return _mh[ 386 ].invokeExact(l, n, t); }
+
+    // 387
+    private static MethodType MT_bootstrap387 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap387 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap387", MT_bootstrap387 ());
+    }
+
+    private static MethodHandle INDY_call387;
+    private static MethodHandle INDY_call387 () throws Throwable {
+        if (INDY_call387 != null) return INDY_call387;
+        CallSite cs = (CallSite) MH_bootstrap387 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap387 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper387 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call387 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap387 (Object l, Object n, Object t) throws Throwable { return _mh[ 387 ].invokeExact(l, n, t); }
+
+    // 388
+    private static MethodType MT_bootstrap388 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap388 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap388", MT_bootstrap388 ());
+    }
+
+    private static MethodHandle INDY_call388;
+    private static MethodHandle INDY_call388 () throws Throwable {
+        if (INDY_call388 != null) return INDY_call388;
+        CallSite cs = (CallSite) MH_bootstrap388 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap388 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper388 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call388 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap388 (Object l, Object n, Object t) throws Throwable { return _mh[ 388 ].invokeExact(l, n, t); }
+
+    // 389
+    private static MethodType MT_bootstrap389 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap389 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap389", MT_bootstrap389 ());
+    }
+
+    private static MethodHandle INDY_call389;
+    private static MethodHandle INDY_call389 () throws Throwable {
+        if (INDY_call389 != null) return INDY_call389;
+        CallSite cs = (CallSite) MH_bootstrap389 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap389 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper389 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call389 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap389 (Object l, Object n, Object t) throws Throwable { return _mh[ 389 ].invokeExact(l, n, t); }
+
+    // 390
+    private static MethodType MT_bootstrap390 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap390 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap390", MT_bootstrap390 ());
+    }
+
+    private static MethodHandle INDY_call390;
+    private static MethodHandle INDY_call390 () throws Throwable {
+        if (INDY_call390 != null) return INDY_call390;
+        CallSite cs = (CallSite) MH_bootstrap390 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap390 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper390 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call390 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap390 (Object l, Object n, Object t) throws Throwable { return _mh[ 390 ].invokeExact(l, n, t); }
+
+    // 391
+    private static MethodType MT_bootstrap391 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap391 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap391", MT_bootstrap391 ());
+    }
+
+    private static MethodHandle INDY_call391;
+    private static MethodHandle INDY_call391 () throws Throwable {
+        if (INDY_call391 != null) return INDY_call391;
+        CallSite cs = (CallSite) MH_bootstrap391 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap391 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper391 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call391 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap391 (Object l, Object n, Object t) throws Throwable { return _mh[ 391 ].invokeExact(l, n, t); }
+
+    // 392
+    private static MethodType MT_bootstrap392 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap392 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap392", MT_bootstrap392 ());
+    }
+
+    private static MethodHandle INDY_call392;
+    private static MethodHandle INDY_call392 () throws Throwable {
+        if (INDY_call392 != null) return INDY_call392;
+        CallSite cs = (CallSite) MH_bootstrap392 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap392 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper392 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call392 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap392 (Object l, Object n, Object t) throws Throwable { return _mh[ 392 ].invokeExact(l, n, t); }
+
+    // 393
+    private static MethodType MT_bootstrap393 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap393 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap393", MT_bootstrap393 ());
+    }
+
+    private static MethodHandle INDY_call393;
+    private static MethodHandle INDY_call393 () throws Throwable {
+        if (INDY_call393 != null) return INDY_call393;
+        CallSite cs = (CallSite) MH_bootstrap393 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap393 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper393 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call393 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap393 (Object l, Object n, Object t) throws Throwable { return _mh[ 393 ].invokeExact(l, n, t); }
+
+    // 394
+    private static MethodType MT_bootstrap394 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap394 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap394", MT_bootstrap394 ());
+    }
+
+    private static MethodHandle INDY_call394;
+    private static MethodHandle INDY_call394 () throws Throwable {
+        if (INDY_call394 != null) return INDY_call394;
+        CallSite cs = (CallSite) MH_bootstrap394 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap394 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper394 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call394 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap394 (Object l, Object n, Object t) throws Throwable { return _mh[ 394 ].invokeExact(l, n, t); }
+
+    // 395
+    private static MethodType MT_bootstrap395 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap395 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap395", MT_bootstrap395 ());
+    }
+
+    private static MethodHandle INDY_call395;
+    private static MethodHandle INDY_call395 () throws Throwable {
+        if (INDY_call395 != null) return INDY_call395;
+        CallSite cs = (CallSite) MH_bootstrap395 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap395 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper395 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call395 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap395 (Object l, Object n, Object t) throws Throwable { return _mh[ 395 ].invokeExact(l, n, t); }
+
+    // 396
+    private static MethodType MT_bootstrap396 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap396 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap396", MT_bootstrap396 ());
+    }
+
+    private static MethodHandle INDY_call396;
+    private static MethodHandle INDY_call396 () throws Throwable {
+        if (INDY_call396 != null) return INDY_call396;
+        CallSite cs = (CallSite) MH_bootstrap396 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap396 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper396 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call396 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap396 (Object l, Object n, Object t) throws Throwable { return _mh[ 396 ].invokeExact(l, n, t); }
+
+    // 397
+    private static MethodType MT_bootstrap397 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap397 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap397", MT_bootstrap397 ());
+    }
+
+    private static MethodHandle INDY_call397;
+    private static MethodHandle INDY_call397 () throws Throwable {
+        if (INDY_call397 != null) return INDY_call397;
+        CallSite cs = (CallSite) MH_bootstrap397 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap397 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper397 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call397 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap397 (Object l, Object n, Object t) throws Throwable { return _mh[ 397 ].invokeExact(l, n, t); }
+
+    // 398
+    private static MethodType MT_bootstrap398 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap398 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap398", MT_bootstrap398 ());
+    }
+
+    private static MethodHandle INDY_call398;
+    private static MethodHandle INDY_call398 () throws Throwable {
+        if (INDY_call398 != null) return INDY_call398;
+        CallSite cs = (CallSite) MH_bootstrap398 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap398 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper398 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call398 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap398 (Object l, Object n, Object t) throws Throwable { return _mh[ 398 ].invokeExact(l, n, t); }
+
+    // 399
+    private static MethodType MT_bootstrap399 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap399 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap399", MT_bootstrap399 ());
+    }
+
+    private static MethodHandle INDY_call399;
+    private static MethodHandle INDY_call399 () throws Throwable {
+        if (INDY_call399 != null) return INDY_call399;
+        CallSite cs = (CallSite) MH_bootstrap399 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap399 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper399 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call399 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap399 (Object l, Object n, Object t) throws Throwable { return _mh[ 399 ].invokeExact(l, n, t); }
+
+    // 400
+    private static MethodType MT_bootstrap400 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap400 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap400", MT_bootstrap400 ());
+    }
+
+    private static MethodHandle INDY_call400;
+    private static MethodHandle INDY_call400 () throws Throwable {
+        if (INDY_call400 != null) return INDY_call400;
+        CallSite cs = (CallSite) MH_bootstrap400 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap400 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper400 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call400 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap400 (Object l, Object n, Object t) throws Throwable { return _mh[ 400 ].invokeExact(l, n, t); }
+
+    // 401
+    private static MethodType MT_bootstrap401 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap401 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap401", MT_bootstrap401 ());
+    }
+
+    private static MethodHandle INDY_call401;
+    private static MethodHandle INDY_call401 () throws Throwable {
+        if (INDY_call401 != null) return INDY_call401;
+        CallSite cs = (CallSite) MH_bootstrap401 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap401 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper401 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call401 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap401 (Object l, Object n, Object t) throws Throwable { return _mh[ 401 ].invokeExact(l, n, t); }
+
+    // 402
+    private static MethodType MT_bootstrap402 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap402 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap402", MT_bootstrap402 ());
+    }
+
+    private static MethodHandle INDY_call402;
+    private static MethodHandle INDY_call402 () throws Throwable {
+        if (INDY_call402 != null) return INDY_call402;
+        CallSite cs = (CallSite) MH_bootstrap402 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap402 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper402 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call402 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap402 (Object l, Object n, Object t) throws Throwable { return _mh[ 402 ].invokeExact(l, n, t); }
+
+    // 403
+    private static MethodType MT_bootstrap403 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap403 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap403", MT_bootstrap403 ());
+    }
+
+    private static MethodHandle INDY_call403;
+    private static MethodHandle INDY_call403 () throws Throwable {
+        if (INDY_call403 != null) return INDY_call403;
+        CallSite cs = (CallSite) MH_bootstrap403 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap403 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper403 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call403 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap403 (Object l, Object n, Object t) throws Throwable { return _mh[ 403 ].invokeExact(l, n, t); }
+
+    // 404
+    private static MethodType MT_bootstrap404 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap404 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap404", MT_bootstrap404 ());
+    }
+
+    private static MethodHandle INDY_call404;
+    private static MethodHandle INDY_call404 () throws Throwable {
+        if (INDY_call404 != null) return INDY_call404;
+        CallSite cs = (CallSite) MH_bootstrap404 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap404 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper404 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call404 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap404 (Object l, Object n, Object t) throws Throwable { return _mh[ 404 ].invokeExact(l, n, t); }
+
+    // 405
+    private static MethodType MT_bootstrap405 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap405 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap405", MT_bootstrap405 ());
+    }
+
+    private static MethodHandle INDY_call405;
+    private static MethodHandle INDY_call405 () throws Throwable {
+        if (INDY_call405 != null) return INDY_call405;
+        CallSite cs = (CallSite) MH_bootstrap405 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap405 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper405 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call405 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap405 (Object l, Object n, Object t) throws Throwable { return _mh[ 405 ].invokeExact(l, n, t); }
+
+    // 406
+    private static MethodType MT_bootstrap406 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap406 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap406", MT_bootstrap406 ());
+    }
+
+    private static MethodHandle INDY_call406;
+    private static MethodHandle INDY_call406 () throws Throwable {
+        if (INDY_call406 != null) return INDY_call406;
+        CallSite cs = (CallSite) MH_bootstrap406 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap406 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper406 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call406 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap406 (Object l, Object n, Object t) throws Throwable { return _mh[ 406 ].invokeExact(l, n, t); }
+
+    // 407
+    private static MethodType MT_bootstrap407 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap407 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap407", MT_bootstrap407 ());
+    }
+
+    private static MethodHandle INDY_call407;
+    private static MethodHandle INDY_call407 () throws Throwable {
+        if (INDY_call407 != null) return INDY_call407;
+        CallSite cs = (CallSite) MH_bootstrap407 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap407 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper407 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call407 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap407 (Object l, Object n, Object t) throws Throwable { return _mh[ 407 ].invokeExact(l, n, t); }
+
+    // 408
+    private static MethodType MT_bootstrap408 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap408 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap408", MT_bootstrap408 ());
+    }
+
+    private static MethodHandle INDY_call408;
+    private static MethodHandle INDY_call408 () throws Throwable {
+        if (INDY_call408 != null) return INDY_call408;
+        CallSite cs = (CallSite) MH_bootstrap408 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap408 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper408 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call408 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap408 (Object l, Object n, Object t) throws Throwable { return _mh[ 408 ].invokeExact(l, n, t); }
+
+    // 409
+    private static MethodType MT_bootstrap409 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap409 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap409", MT_bootstrap409 ());
+    }
+
+    private static MethodHandle INDY_call409;
+    private static MethodHandle INDY_call409 () throws Throwable {
+        if (INDY_call409 != null) return INDY_call409;
+        CallSite cs = (CallSite) MH_bootstrap409 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap409 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper409 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call409 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap409 (Object l, Object n, Object t) throws Throwable { return _mh[ 409 ].invokeExact(l, n, t); }
+
+    // 410
+    private static MethodType MT_bootstrap410 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap410 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap410", MT_bootstrap410 ());
+    }
+
+    private static MethodHandle INDY_call410;
+    private static MethodHandle INDY_call410 () throws Throwable {
+        if (INDY_call410 != null) return INDY_call410;
+        CallSite cs = (CallSite) MH_bootstrap410 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap410 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper410 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call410 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap410 (Object l, Object n, Object t) throws Throwable { return _mh[ 410 ].invokeExact(l, n, t); }
+
+    // 411
+    private static MethodType MT_bootstrap411 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap411 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap411", MT_bootstrap411 ());
+    }
+
+    private static MethodHandle INDY_call411;
+    private static MethodHandle INDY_call411 () throws Throwable {
+        if (INDY_call411 != null) return INDY_call411;
+        CallSite cs = (CallSite) MH_bootstrap411 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap411 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper411 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call411 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap411 (Object l, Object n, Object t) throws Throwable { return _mh[ 411 ].invokeExact(l, n, t); }
+
+    // 412
+    private static MethodType MT_bootstrap412 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap412 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap412", MT_bootstrap412 ());
+    }
+
+    private static MethodHandle INDY_call412;
+    private static MethodHandle INDY_call412 () throws Throwable {
+        if (INDY_call412 != null) return INDY_call412;
+        CallSite cs = (CallSite) MH_bootstrap412 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap412 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper412 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call412 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap412 (Object l, Object n, Object t) throws Throwable { return _mh[ 412 ].invokeExact(l, n, t); }
+
+    // 413
+    private static MethodType MT_bootstrap413 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap413 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap413", MT_bootstrap413 ());
+    }
+
+    private static MethodHandle INDY_call413;
+    private static MethodHandle INDY_call413 () throws Throwable {
+        if (INDY_call413 != null) return INDY_call413;
+        CallSite cs = (CallSite) MH_bootstrap413 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap413 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper413 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call413 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap413 (Object l, Object n, Object t) throws Throwable { return _mh[ 413 ].invokeExact(l, n, t); }
+
+    // 414
+    private static MethodType MT_bootstrap414 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap414 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap414", MT_bootstrap414 ());
+    }
+
+    private static MethodHandle INDY_call414;
+    private static MethodHandle INDY_call414 () throws Throwable {
+        if (INDY_call414 != null) return INDY_call414;
+        CallSite cs = (CallSite) MH_bootstrap414 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap414 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper414 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call414 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap414 (Object l, Object n, Object t) throws Throwable { return _mh[ 414 ].invokeExact(l, n, t); }
+
+    // 415
+    private static MethodType MT_bootstrap415 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap415 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap415", MT_bootstrap415 ());
+    }
+
+    private static MethodHandle INDY_call415;
+    private static MethodHandle INDY_call415 () throws Throwable {
+        if (INDY_call415 != null) return INDY_call415;
+        CallSite cs = (CallSite) MH_bootstrap415 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap415 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper415 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call415 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap415 (Object l, Object n, Object t) throws Throwable { return _mh[ 415 ].invokeExact(l, n, t); }
+
+    // 416
+    private static MethodType MT_bootstrap416 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap416 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap416", MT_bootstrap416 ());
+    }
+
+    private static MethodHandle INDY_call416;
+    private static MethodHandle INDY_call416 () throws Throwable {
+        if (INDY_call416 != null) return INDY_call416;
+        CallSite cs = (CallSite) MH_bootstrap416 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap416 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper416 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call416 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap416 (Object l, Object n, Object t) throws Throwable { return _mh[ 416 ].invokeExact(l, n, t); }
+
+    // 417
+    private static MethodType MT_bootstrap417 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap417 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap417", MT_bootstrap417 ());
+    }
+
+    private static MethodHandle INDY_call417;
+    private static MethodHandle INDY_call417 () throws Throwable {
+        if (INDY_call417 != null) return INDY_call417;
+        CallSite cs = (CallSite) MH_bootstrap417 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap417 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper417 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call417 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap417 (Object l, Object n, Object t) throws Throwable { return _mh[ 417 ].invokeExact(l, n, t); }
+
+    // 418
+    private static MethodType MT_bootstrap418 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap418 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap418", MT_bootstrap418 ());
+    }
+
+    private static MethodHandle INDY_call418;
+    private static MethodHandle INDY_call418 () throws Throwable {
+        if (INDY_call418 != null) return INDY_call418;
+        CallSite cs = (CallSite) MH_bootstrap418 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap418 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper418 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call418 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap418 (Object l, Object n, Object t) throws Throwable { return _mh[ 418 ].invokeExact(l, n, t); }
+
+    // 419
+    private static MethodType MT_bootstrap419 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap419 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap419", MT_bootstrap419 ());
+    }
+
+    private static MethodHandle INDY_call419;
+    private static MethodHandle INDY_call419 () throws Throwable {
+        if (INDY_call419 != null) return INDY_call419;
+        CallSite cs = (CallSite) MH_bootstrap419 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap419 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper419 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call419 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap419 (Object l, Object n, Object t) throws Throwable { return _mh[ 419 ].invokeExact(l, n, t); }
+
+    // 420
+    private static MethodType MT_bootstrap420 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap420 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap420", MT_bootstrap420 ());
+    }
+
+    private static MethodHandle INDY_call420;
+    private static MethodHandle INDY_call420 () throws Throwable {
+        if (INDY_call420 != null) return INDY_call420;
+        CallSite cs = (CallSite) MH_bootstrap420 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap420 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper420 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call420 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap420 (Object l, Object n, Object t) throws Throwable { return _mh[ 420 ].invokeExact(l, n, t); }
+
+    // 421
+    private static MethodType MT_bootstrap421 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap421 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap421", MT_bootstrap421 ());
+    }
+
+    private static MethodHandle INDY_call421;
+    private static MethodHandle INDY_call421 () throws Throwable {
+        if (INDY_call421 != null) return INDY_call421;
+        CallSite cs = (CallSite) MH_bootstrap421 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap421 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper421 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call421 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap421 (Object l, Object n, Object t) throws Throwable { return _mh[ 421 ].invokeExact(l, n, t); }
+
+    // 422
+    private static MethodType MT_bootstrap422 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap422 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap422", MT_bootstrap422 ());
+    }
+
+    private static MethodHandle INDY_call422;
+    private static MethodHandle INDY_call422 () throws Throwable {
+        if (INDY_call422 != null) return INDY_call422;
+        CallSite cs = (CallSite) MH_bootstrap422 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap422 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper422 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call422 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap422 (Object l, Object n, Object t) throws Throwable { return _mh[ 422 ].invokeExact(l, n, t); }
+
+    // 423
+    private static MethodType MT_bootstrap423 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap423 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap423", MT_bootstrap423 ());
+    }
+
+    private static MethodHandle INDY_call423;
+    private static MethodHandle INDY_call423 () throws Throwable {
+        if (INDY_call423 != null) return INDY_call423;
+        CallSite cs = (CallSite) MH_bootstrap423 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap423 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper423 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call423 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap423 (Object l, Object n, Object t) throws Throwable { return _mh[ 423 ].invokeExact(l, n, t); }
+
+    // 424
+    private static MethodType MT_bootstrap424 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap424 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap424", MT_bootstrap424 ());
+    }
+
+    private static MethodHandle INDY_call424;
+    private static MethodHandle INDY_call424 () throws Throwable {
+        if (INDY_call424 != null) return INDY_call424;
+        CallSite cs = (CallSite) MH_bootstrap424 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap424 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper424 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call424 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap424 (Object l, Object n, Object t) throws Throwable { return _mh[ 424 ].invokeExact(l, n, t); }
+
+    // 425
+    private static MethodType MT_bootstrap425 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap425 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap425", MT_bootstrap425 ());
+    }
+
+    private static MethodHandle INDY_call425;
+    private static MethodHandle INDY_call425 () throws Throwable {
+        if (INDY_call425 != null) return INDY_call425;
+        CallSite cs = (CallSite) MH_bootstrap425 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap425 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper425 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call425 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap425 (Object l, Object n, Object t) throws Throwable { return _mh[ 425 ].invokeExact(l, n, t); }
+
+    // 426
+    private static MethodType MT_bootstrap426 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap426 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap426", MT_bootstrap426 ());
+    }
+
+    private static MethodHandle INDY_call426;
+    private static MethodHandle INDY_call426 () throws Throwable {
+        if (INDY_call426 != null) return INDY_call426;
+        CallSite cs = (CallSite) MH_bootstrap426 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap426 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper426 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call426 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap426 (Object l, Object n, Object t) throws Throwable { return _mh[ 426 ].invokeExact(l, n, t); }
+
+    // 427
+    private static MethodType MT_bootstrap427 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap427 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap427", MT_bootstrap427 ());
+    }
+
+    private static MethodHandle INDY_call427;
+    private static MethodHandle INDY_call427 () throws Throwable {
+        if (INDY_call427 != null) return INDY_call427;
+        CallSite cs = (CallSite) MH_bootstrap427 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap427 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper427 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call427 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap427 (Object l, Object n, Object t) throws Throwable { return _mh[ 427 ].invokeExact(l, n, t); }
+
+    // 428
+    private static MethodType MT_bootstrap428 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap428 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap428", MT_bootstrap428 ());
+    }
+
+    private static MethodHandle INDY_call428;
+    private static MethodHandle INDY_call428 () throws Throwable {
+        if (INDY_call428 != null) return INDY_call428;
+        CallSite cs = (CallSite) MH_bootstrap428 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap428 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper428 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call428 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap428 (Object l, Object n, Object t) throws Throwable { return _mh[ 428 ].invokeExact(l, n, t); }
+
+    // 429
+    private static MethodType MT_bootstrap429 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap429 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap429", MT_bootstrap429 ());
+    }
+
+    private static MethodHandle INDY_call429;
+    private static MethodHandle INDY_call429 () throws Throwable {
+        if (INDY_call429 != null) return INDY_call429;
+        CallSite cs = (CallSite) MH_bootstrap429 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap429 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper429 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call429 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap429 (Object l, Object n, Object t) throws Throwable { return _mh[ 429 ].invokeExact(l, n, t); }
+
+    // 430
+    private static MethodType MT_bootstrap430 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap430 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap430", MT_bootstrap430 ());
+    }
+
+    private static MethodHandle INDY_call430;
+    private static MethodHandle INDY_call430 () throws Throwable {
+        if (INDY_call430 != null) return INDY_call430;
+        CallSite cs = (CallSite) MH_bootstrap430 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap430 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper430 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call430 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap430 (Object l, Object n, Object t) throws Throwable { return _mh[ 430 ].invokeExact(l, n, t); }
+
+    // 431
+    private static MethodType MT_bootstrap431 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap431 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap431", MT_bootstrap431 ());
+    }
+
+    private static MethodHandle INDY_call431;
+    private static MethodHandle INDY_call431 () throws Throwable {
+        if (INDY_call431 != null) return INDY_call431;
+        CallSite cs = (CallSite) MH_bootstrap431 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap431 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper431 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call431 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap431 (Object l, Object n, Object t) throws Throwable { return _mh[ 431 ].invokeExact(l, n, t); }
+
+    // 432
+    private static MethodType MT_bootstrap432 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap432 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap432", MT_bootstrap432 ());
+    }
+
+    private static MethodHandle INDY_call432;
+    private static MethodHandle INDY_call432 () throws Throwable {
+        if (INDY_call432 != null) return INDY_call432;
+        CallSite cs = (CallSite) MH_bootstrap432 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap432 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper432 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call432 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap432 (Object l, Object n, Object t) throws Throwable { return _mh[ 432 ].invokeExact(l, n, t); }
+
+    // 433
+    private static MethodType MT_bootstrap433 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap433 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap433", MT_bootstrap433 ());
+    }
+
+    private static MethodHandle INDY_call433;
+    private static MethodHandle INDY_call433 () throws Throwable {
+        if (INDY_call433 != null) return INDY_call433;
+        CallSite cs = (CallSite) MH_bootstrap433 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap433 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper433 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call433 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap433 (Object l, Object n, Object t) throws Throwable { return _mh[ 433 ].invokeExact(l, n, t); }
+
+    // 434
+    private static MethodType MT_bootstrap434 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap434 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap434", MT_bootstrap434 ());
+    }
+
+    private static MethodHandle INDY_call434;
+    private static MethodHandle INDY_call434 () throws Throwable {
+        if (INDY_call434 != null) return INDY_call434;
+        CallSite cs = (CallSite) MH_bootstrap434 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap434 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper434 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call434 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap434 (Object l, Object n, Object t) throws Throwable { return _mh[ 434 ].invokeExact(l, n, t); }
+
+    // 435
+    private static MethodType MT_bootstrap435 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap435 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap435", MT_bootstrap435 ());
+    }
+
+    private static MethodHandle INDY_call435;
+    private static MethodHandle INDY_call435 () throws Throwable {
+        if (INDY_call435 != null) return INDY_call435;
+        CallSite cs = (CallSite) MH_bootstrap435 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap435 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper435 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call435 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap435 (Object l, Object n, Object t) throws Throwable { return _mh[ 435 ].invokeExact(l, n, t); }
+
+    // 436
+    private static MethodType MT_bootstrap436 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap436 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap436", MT_bootstrap436 ());
+    }
+
+    private static MethodHandle INDY_call436;
+    private static MethodHandle INDY_call436 () throws Throwable {
+        if (INDY_call436 != null) return INDY_call436;
+        CallSite cs = (CallSite) MH_bootstrap436 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap436 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper436 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call436 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap436 (Object l, Object n, Object t) throws Throwable { return _mh[ 436 ].invokeExact(l, n, t); }
+
+    // 437
+    private static MethodType MT_bootstrap437 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap437 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap437", MT_bootstrap437 ());
+    }
+
+    private static MethodHandle INDY_call437;
+    private static MethodHandle INDY_call437 () throws Throwable {
+        if (INDY_call437 != null) return INDY_call437;
+        CallSite cs = (CallSite) MH_bootstrap437 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap437 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper437 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call437 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap437 (Object l, Object n, Object t) throws Throwable { return _mh[ 437 ].invokeExact(l, n, t); }
+
+    // 438
+    private static MethodType MT_bootstrap438 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap438 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap438", MT_bootstrap438 ());
+    }
+
+    private static MethodHandle INDY_call438;
+    private static MethodHandle INDY_call438 () throws Throwable {
+        if (INDY_call438 != null) return INDY_call438;
+        CallSite cs = (CallSite) MH_bootstrap438 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap438 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper438 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call438 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap438 (Object l, Object n, Object t) throws Throwable { return _mh[ 438 ].invokeExact(l, n, t); }
+
+    // 439
+    private static MethodType MT_bootstrap439 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap439 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap439", MT_bootstrap439 ());
+    }
+
+    private static MethodHandle INDY_call439;
+    private static MethodHandle INDY_call439 () throws Throwable {
+        if (INDY_call439 != null) return INDY_call439;
+        CallSite cs = (CallSite) MH_bootstrap439 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap439 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper439 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call439 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap439 (Object l, Object n, Object t) throws Throwable { return _mh[ 439 ].invokeExact(l, n, t); }
+
+    // 440
+    private static MethodType MT_bootstrap440 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap440 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap440", MT_bootstrap440 ());
+    }
+
+    private static MethodHandle INDY_call440;
+    private static MethodHandle INDY_call440 () throws Throwable {
+        if (INDY_call440 != null) return INDY_call440;
+        CallSite cs = (CallSite) MH_bootstrap440 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap440 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper440 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call440 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap440 (Object l, Object n, Object t) throws Throwable { return _mh[ 440 ].invokeExact(l, n, t); }
+
+    // 441
+    private static MethodType MT_bootstrap441 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap441 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap441", MT_bootstrap441 ());
+    }
+
+    private static MethodHandle INDY_call441;
+    private static MethodHandle INDY_call441 () throws Throwable {
+        if (INDY_call441 != null) return INDY_call441;
+        CallSite cs = (CallSite) MH_bootstrap441 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap441 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper441 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call441 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap441 (Object l, Object n, Object t) throws Throwable { return _mh[ 441 ].invokeExact(l, n, t); }
+
+    // 442
+    private static MethodType MT_bootstrap442 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap442 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap442", MT_bootstrap442 ());
+    }
+
+    private static MethodHandle INDY_call442;
+    private static MethodHandle INDY_call442 () throws Throwable {
+        if (INDY_call442 != null) return INDY_call442;
+        CallSite cs = (CallSite) MH_bootstrap442 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap442 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper442 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call442 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap442 (Object l, Object n, Object t) throws Throwable { return _mh[ 442 ].invokeExact(l, n, t); }
+
+    // 443
+    private static MethodType MT_bootstrap443 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap443 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap443", MT_bootstrap443 ());
+    }
+
+    private static MethodHandle INDY_call443;
+    private static MethodHandle INDY_call443 () throws Throwable {
+        if (INDY_call443 != null) return INDY_call443;
+        CallSite cs = (CallSite) MH_bootstrap443 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap443 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper443 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call443 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap443 (Object l, Object n, Object t) throws Throwable { return _mh[ 443 ].invokeExact(l, n, t); }
+
+    // 444
+    private static MethodType MT_bootstrap444 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap444 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap444", MT_bootstrap444 ());
+    }
+
+    private static MethodHandle INDY_call444;
+    private static MethodHandle INDY_call444 () throws Throwable {
+        if (INDY_call444 != null) return INDY_call444;
+        CallSite cs = (CallSite) MH_bootstrap444 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap444 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper444 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call444 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap444 (Object l, Object n, Object t) throws Throwable { return _mh[ 444 ].invokeExact(l, n, t); }
+
+    // 445
+    private static MethodType MT_bootstrap445 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap445 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap445", MT_bootstrap445 ());
+    }
+
+    private static MethodHandle INDY_call445;
+    private static MethodHandle INDY_call445 () throws Throwable {
+        if (INDY_call445 != null) return INDY_call445;
+        CallSite cs = (CallSite) MH_bootstrap445 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap445 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper445 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call445 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap445 (Object l, Object n, Object t) throws Throwable { return _mh[ 445 ].invokeExact(l, n, t); }
+
+    // 446
+    private static MethodType MT_bootstrap446 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap446 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap446", MT_bootstrap446 ());
+    }
+
+    private static MethodHandle INDY_call446;
+    private static MethodHandle INDY_call446 () throws Throwable {
+        if (INDY_call446 != null) return INDY_call446;
+        CallSite cs = (CallSite) MH_bootstrap446 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap446 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper446 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call446 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap446 (Object l, Object n, Object t) throws Throwable { return _mh[ 446 ].invokeExact(l, n, t); }
+
+    // 447
+    private static MethodType MT_bootstrap447 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap447 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap447", MT_bootstrap447 ());
+    }
+
+    private static MethodHandle INDY_call447;
+    private static MethodHandle INDY_call447 () throws Throwable {
+        if (INDY_call447 != null) return INDY_call447;
+        CallSite cs = (CallSite) MH_bootstrap447 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap447 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper447 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call447 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap447 (Object l, Object n, Object t) throws Throwable { return _mh[ 447 ].invokeExact(l, n, t); }
+
+    // 448
+    private static MethodType MT_bootstrap448 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap448 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap448", MT_bootstrap448 ());
+    }
+
+    private static MethodHandle INDY_call448;
+    private static MethodHandle INDY_call448 () throws Throwable {
+        if (INDY_call448 != null) return INDY_call448;
+        CallSite cs = (CallSite) MH_bootstrap448 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap448 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper448 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call448 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap448 (Object l, Object n, Object t) throws Throwable { return _mh[ 448 ].invokeExact(l, n, t); }
+
+    // 449
+    private static MethodType MT_bootstrap449 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap449 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap449", MT_bootstrap449 ());
+    }
+
+    private static MethodHandle INDY_call449;
+    private static MethodHandle INDY_call449 () throws Throwable {
+        if (INDY_call449 != null) return INDY_call449;
+        CallSite cs = (CallSite) MH_bootstrap449 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap449 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper449 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call449 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap449 (Object l, Object n, Object t) throws Throwable { return _mh[ 449 ].invokeExact(l, n, t); }
+
+    // 450
+    private static MethodType MT_bootstrap450 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap450 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap450", MT_bootstrap450 ());
+    }
+
+    private static MethodHandle INDY_call450;
+    private static MethodHandle INDY_call450 () throws Throwable {
+        if (INDY_call450 != null) return INDY_call450;
+        CallSite cs = (CallSite) MH_bootstrap450 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap450 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper450 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call450 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap450 (Object l, Object n, Object t) throws Throwable { return _mh[ 450 ].invokeExact(l, n, t); }
+
+    // 451
+    private static MethodType MT_bootstrap451 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap451 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap451", MT_bootstrap451 ());
+    }
+
+    private static MethodHandle INDY_call451;
+    private static MethodHandle INDY_call451 () throws Throwable {
+        if (INDY_call451 != null) return INDY_call451;
+        CallSite cs = (CallSite) MH_bootstrap451 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap451 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper451 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call451 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap451 (Object l, Object n, Object t) throws Throwable { return _mh[ 451 ].invokeExact(l, n, t); }
+
+    // 452
+    private static MethodType MT_bootstrap452 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap452 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap452", MT_bootstrap452 ());
+    }
+
+    private static MethodHandle INDY_call452;
+    private static MethodHandle INDY_call452 () throws Throwable {
+        if (INDY_call452 != null) return INDY_call452;
+        CallSite cs = (CallSite) MH_bootstrap452 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap452 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper452 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call452 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap452 (Object l, Object n, Object t) throws Throwable { return _mh[ 452 ].invokeExact(l, n, t); }
+
+    // 453
+    private static MethodType MT_bootstrap453 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap453 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap453", MT_bootstrap453 ());
+    }
+
+    private static MethodHandle INDY_call453;
+    private static MethodHandle INDY_call453 () throws Throwable {
+        if (INDY_call453 != null) return INDY_call453;
+        CallSite cs = (CallSite) MH_bootstrap453 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap453 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper453 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call453 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap453 (Object l, Object n, Object t) throws Throwable { return _mh[ 453 ].invokeExact(l, n, t); }
+
+    // 454
+    private static MethodType MT_bootstrap454 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap454 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap454", MT_bootstrap454 ());
+    }
+
+    private static MethodHandle INDY_call454;
+    private static MethodHandle INDY_call454 () throws Throwable {
+        if (INDY_call454 != null) return INDY_call454;
+        CallSite cs = (CallSite) MH_bootstrap454 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap454 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper454 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call454 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap454 (Object l, Object n, Object t) throws Throwable { return _mh[ 454 ].invokeExact(l, n, t); }
+
+    // 455
+    private static MethodType MT_bootstrap455 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap455 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap455", MT_bootstrap455 ());
+    }
+
+    private static MethodHandle INDY_call455;
+    private static MethodHandle INDY_call455 () throws Throwable {
+        if (INDY_call455 != null) return INDY_call455;
+        CallSite cs = (CallSite) MH_bootstrap455 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap455 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper455 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call455 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap455 (Object l, Object n, Object t) throws Throwable { return _mh[ 455 ].invokeExact(l, n, t); }
+
+    // 456
+    private static MethodType MT_bootstrap456 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap456 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap456", MT_bootstrap456 ());
+    }
+
+    private static MethodHandle INDY_call456;
+    private static MethodHandle INDY_call456 () throws Throwable {
+        if (INDY_call456 != null) return INDY_call456;
+        CallSite cs = (CallSite) MH_bootstrap456 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap456 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper456 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call456 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap456 (Object l, Object n, Object t) throws Throwable { return _mh[ 456 ].invokeExact(l, n, t); }
+
+    // 457
+    private static MethodType MT_bootstrap457 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap457 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap457", MT_bootstrap457 ());
+    }
+
+    private static MethodHandle INDY_call457;
+    private static MethodHandle INDY_call457 () throws Throwable {
+        if (INDY_call457 != null) return INDY_call457;
+        CallSite cs = (CallSite) MH_bootstrap457 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap457 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper457 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call457 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap457 (Object l, Object n, Object t) throws Throwable { return _mh[ 457 ].invokeExact(l, n, t); }
+
+    // 458
+    private static MethodType MT_bootstrap458 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap458 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap458", MT_bootstrap458 ());
+    }
+
+    private static MethodHandle INDY_call458;
+    private static MethodHandle INDY_call458 () throws Throwable {
+        if (INDY_call458 != null) return INDY_call458;
+        CallSite cs = (CallSite) MH_bootstrap458 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap458 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper458 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call458 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap458 (Object l, Object n, Object t) throws Throwable { return _mh[ 458 ].invokeExact(l, n, t); }
+
+    // 459
+    private static MethodType MT_bootstrap459 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap459 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap459", MT_bootstrap459 ());
+    }
+
+    private static MethodHandle INDY_call459;
+    private static MethodHandle INDY_call459 () throws Throwable {
+        if (INDY_call459 != null) return INDY_call459;
+        CallSite cs = (CallSite) MH_bootstrap459 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap459 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper459 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call459 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap459 (Object l, Object n, Object t) throws Throwable { return _mh[ 459 ].invokeExact(l, n, t); }
+
+    // 460
+    private static MethodType MT_bootstrap460 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap460 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap460", MT_bootstrap460 ());
+    }
+
+    private static MethodHandle INDY_call460;
+    private static MethodHandle INDY_call460 () throws Throwable {
+        if (INDY_call460 != null) return INDY_call460;
+        CallSite cs = (CallSite) MH_bootstrap460 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap460 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper460 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call460 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap460 (Object l, Object n, Object t) throws Throwable { return _mh[ 460 ].invokeExact(l, n, t); }
+
+    // 461
+    private static MethodType MT_bootstrap461 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap461 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap461", MT_bootstrap461 ());
+    }
+
+    private static MethodHandle INDY_call461;
+    private static MethodHandle INDY_call461 () throws Throwable {
+        if (INDY_call461 != null) return INDY_call461;
+        CallSite cs = (CallSite) MH_bootstrap461 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap461 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper461 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call461 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap461 (Object l, Object n, Object t) throws Throwable { return _mh[ 461 ].invokeExact(l, n, t); }
+
+    // 462
+    private static MethodType MT_bootstrap462 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap462 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap462", MT_bootstrap462 ());
+    }
+
+    private static MethodHandle INDY_call462;
+    private static MethodHandle INDY_call462 () throws Throwable {
+        if (INDY_call462 != null) return INDY_call462;
+        CallSite cs = (CallSite) MH_bootstrap462 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap462 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper462 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call462 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap462 (Object l, Object n, Object t) throws Throwable { return _mh[ 462 ].invokeExact(l, n, t); }
+
+    // 463
+    private static MethodType MT_bootstrap463 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap463 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap463", MT_bootstrap463 ());
+    }
+
+    private static MethodHandle INDY_call463;
+    private static MethodHandle INDY_call463 () throws Throwable {
+        if (INDY_call463 != null) return INDY_call463;
+        CallSite cs = (CallSite) MH_bootstrap463 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap463 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper463 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call463 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap463 (Object l, Object n, Object t) throws Throwable { return _mh[ 463 ].invokeExact(l, n, t); }
+
+    // 464
+    private static MethodType MT_bootstrap464 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap464 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap464", MT_bootstrap464 ());
+    }
+
+    private static MethodHandle INDY_call464;
+    private static MethodHandle INDY_call464 () throws Throwable {
+        if (INDY_call464 != null) return INDY_call464;
+        CallSite cs = (CallSite) MH_bootstrap464 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap464 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper464 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call464 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap464 (Object l, Object n, Object t) throws Throwable { return _mh[ 464 ].invokeExact(l, n, t); }
+
+    // 465
+    private static MethodType MT_bootstrap465 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap465 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap465", MT_bootstrap465 ());
+    }
+
+    private static MethodHandle INDY_call465;
+    private static MethodHandle INDY_call465 () throws Throwable {
+        if (INDY_call465 != null) return INDY_call465;
+        CallSite cs = (CallSite) MH_bootstrap465 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap465 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper465 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call465 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap465 (Object l, Object n, Object t) throws Throwable { return _mh[ 465 ].invokeExact(l, n, t); }
+
+    // 466
+    private static MethodType MT_bootstrap466 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap466 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap466", MT_bootstrap466 ());
+    }
+
+    private static MethodHandle INDY_call466;
+    private static MethodHandle INDY_call466 () throws Throwable {
+        if (INDY_call466 != null) return INDY_call466;
+        CallSite cs = (CallSite) MH_bootstrap466 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap466 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper466 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call466 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap466 (Object l, Object n, Object t) throws Throwable { return _mh[ 466 ].invokeExact(l, n, t); }
+
+    // 467
+    private static MethodType MT_bootstrap467 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap467 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap467", MT_bootstrap467 ());
+    }
+
+    private static MethodHandle INDY_call467;
+    private static MethodHandle INDY_call467 () throws Throwable {
+        if (INDY_call467 != null) return INDY_call467;
+        CallSite cs = (CallSite) MH_bootstrap467 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap467 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper467 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call467 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap467 (Object l, Object n, Object t) throws Throwable { return _mh[ 467 ].invokeExact(l, n, t); }
+
+    // 468
+    private static MethodType MT_bootstrap468 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap468 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap468", MT_bootstrap468 ());
+    }
+
+    private static MethodHandle INDY_call468;
+    private static MethodHandle INDY_call468 () throws Throwable {
+        if (INDY_call468 != null) return INDY_call468;
+        CallSite cs = (CallSite) MH_bootstrap468 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap468 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper468 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call468 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap468 (Object l, Object n, Object t) throws Throwable { return _mh[ 468 ].invokeExact(l, n, t); }
+
+    // 469
+    private static MethodType MT_bootstrap469 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap469 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap469", MT_bootstrap469 ());
+    }
+
+    private static MethodHandle INDY_call469;
+    private static MethodHandle INDY_call469 () throws Throwable {
+        if (INDY_call469 != null) return INDY_call469;
+        CallSite cs = (CallSite) MH_bootstrap469 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap469 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper469 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call469 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap469 (Object l, Object n, Object t) throws Throwable { return _mh[ 469 ].invokeExact(l, n, t); }
+
+    // 470
+    private static MethodType MT_bootstrap470 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap470 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap470", MT_bootstrap470 ());
+    }
+
+    private static MethodHandle INDY_call470;
+    private static MethodHandle INDY_call470 () throws Throwable {
+        if (INDY_call470 != null) return INDY_call470;
+        CallSite cs = (CallSite) MH_bootstrap470 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap470 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper470 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call470 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap470 (Object l, Object n, Object t) throws Throwable { return _mh[ 470 ].invokeExact(l, n, t); }
+
+    // 471
+    private static MethodType MT_bootstrap471 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap471 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap471", MT_bootstrap471 ());
+    }
+
+    private static MethodHandle INDY_call471;
+    private static MethodHandle INDY_call471 () throws Throwable {
+        if (INDY_call471 != null) return INDY_call471;
+        CallSite cs = (CallSite) MH_bootstrap471 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap471 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper471 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call471 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap471 (Object l, Object n, Object t) throws Throwable { return _mh[ 471 ].invokeExact(l, n, t); }
+
+    // 472
+    private static MethodType MT_bootstrap472 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap472 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap472", MT_bootstrap472 ());
+    }
+
+    private static MethodHandle INDY_call472;
+    private static MethodHandle INDY_call472 () throws Throwable {
+        if (INDY_call472 != null) return INDY_call472;
+        CallSite cs = (CallSite) MH_bootstrap472 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap472 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper472 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call472 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap472 (Object l, Object n, Object t) throws Throwable { return _mh[ 472 ].invokeExact(l, n, t); }
+
+    // 473
+    private static MethodType MT_bootstrap473 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap473 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap473", MT_bootstrap473 ());
+    }
+
+    private static MethodHandle INDY_call473;
+    private static MethodHandle INDY_call473 () throws Throwable {
+        if (INDY_call473 != null) return INDY_call473;
+        CallSite cs = (CallSite) MH_bootstrap473 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap473 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper473 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call473 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap473 (Object l, Object n, Object t) throws Throwable { return _mh[ 473 ].invokeExact(l, n, t); }
+
+    // 474
+    private static MethodType MT_bootstrap474 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap474 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap474", MT_bootstrap474 ());
+    }
+
+    private static MethodHandle INDY_call474;
+    private static MethodHandle INDY_call474 () throws Throwable {
+        if (INDY_call474 != null) return INDY_call474;
+        CallSite cs = (CallSite) MH_bootstrap474 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap474 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper474 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call474 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap474 (Object l, Object n, Object t) throws Throwable { return _mh[ 474 ].invokeExact(l, n, t); }
+
+    // 475
+    private static MethodType MT_bootstrap475 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap475 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap475", MT_bootstrap475 ());
+    }
+
+    private static MethodHandle INDY_call475;
+    private static MethodHandle INDY_call475 () throws Throwable {
+        if (INDY_call475 != null) return INDY_call475;
+        CallSite cs = (CallSite) MH_bootstrap475 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap475 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper475 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call475 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap475 (Object l, Object n, Object t) throws Throwable { return _mh[ 475 ].invokeExact(l, n, t); }
+
+    // 476
+    private static MethodType MT_bootstrap476 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap476 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap476", MT_bootstrap476 ());
+    }
+
+    private static MethodHandle INDY_call476;
+    private static MethodHandle INDY_call476 () throws Throwable {
+        if (INDY_call476 != null) return INDY_call476;
+        CallSite cs = (CallSite) MH_bootstrap476 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap476 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper476 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call476 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap476 (Object l, Object n, Object t) throws Throwable { return _mh[ 476 ].invokeExact(l, n, t); }
+
+    // 477
+    private static MethodType MT_bootstrap477 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap477 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap477", MT_bootstrap477 ());
+    }
+
+    private static MethodHandle INDY_call477;
+    private static MethodHandle INDY_call477 () throws Throwable {
+        if (INDY_call477 != null) return INDY_call477;
+        CallSite cs = (CallSite) MH_bootstrap477 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap477 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper477 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call477 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap477 (Object l, Object n, Object t) throws Throwable { return _mh[ 477 ].invokeExact(l, n, t); }
+
+    // 478
+    private static MethodType MT_bootstrap478 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap478 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap478", MT_bootstrap478 ());
+    }
+
+    private static MethodHandle INDY_call478;
+    private static MethodHandle INDY_call478 () throws Throwable {
+        if (INDY_call478 != null) return INDY_call478;
+        CallSite cs = (CallSite) MH_bootstrap478 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap478 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper478 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call478 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap478 (Object l, Object n, Object t) throws Throwable { return _mh[ 478 ].invokeExact(l, n, t); }
+
+    // 479
+    private static MethodType MT_bootstrap479 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap479 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap479", MT_bootstrap479 ());
+    }
+
+    private static MethodHandle INDY_call479;
+    private static MethodHandle INDY_call479 () throws Throwable {
+        if (INDY_call479 != null) return INDY_call479;
+        CallSite cs = (CallSite) MH_bootstrap479 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap479 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper479 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call479 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap479 (Object l, Object n, Object t) throws Throwable { return _mh[ 479 ].invokeExact(l, n, t); }
+
+    // 480
+    private static MethodType MT_bootstrap480 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap480 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap480", MT_bootstrap480 ());
+    }
+
+    private static MethodHandle INDY_call480;
+    private static MethodHandle INDY_call480 () throws Throwable {
+        if (INDY_call480 != null) return INDY_call480;
+        CallSite cs = (CallSite) MH_bootstrap480 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap480 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper480 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call480 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap480 (Object l, Object n, Object t) throws Throwable { return _mh[ 480 ].invokeExact(l, n, t); }
+
+    // 481
+    private static MethodType MT_bootstrap481 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap481 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap481", MT_bootstrap481 ());
+    }
+
+    private static MethodHandle INDY_call481;
+    private static MethodHandle INDY_call481 () throws Throwable {
+        if (INDY_call481 != null) return INDY_call481;
+        CallSite cs = (CallSite) MH_bootstrap481 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap481 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper481 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call481 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap481 (Object l, Object n, Object t) throws Throwable { return _mh[ 481 ].invokeExact(l, n, t); }
+
+    // 482
+    private static MethodType MT_bootstrap482 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap482 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap482", MT_bootstrap482 ());
+    }
+
+    private static MethodHandle INDY_call482;
+    private static MethodHandle INDY_call482 () throws Throwable {
+        if (INDY_call482 != null) return INDY_call482;
+        CallSite cs = (CallSite) MH_bootstrap482 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap482 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper482 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call482 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap482 (Object l, Object n, Object t) throws Throwable { return _mh[ 482 ].invokeExact(l, n, t); }
+
+    // 483
+    private static MethodType MT_bootstrap483 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap483 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap483", MT_bootstrap483 ());
+    }
+
+    private static MethodHandle INDY_call483;
+    private static MethodHandle INDY_call483 () throws Throwable {
+        if (INDY_call483 != null) return INDY_call483;
+        CallSite cs = (CallSite) MH_bootstrap483 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap483 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper483 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call483 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap483 (Object l, Object n, Object t) throws Throwable { return _mh[ 483 ].invokeExact(l, n, t); }
+
+    // 484
+    private static MethodType MT_bootstrap484 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap484 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap484", MT_bootstrap484 ());
+    }
+
+    private static MethodHandle INDY_call484;
+    private static MethodHandle INDY_call484 () throws Throwable {
+        if (INDY_call484 != null) return INDY_call484;
+        CallSite cs = (CallSite) MH_bootstrap484 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap484 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper484 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call484 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap484 (Object l, Object n, Object t) throws Throwable { return _mh[ 484 ].invokeExact(l, n, t); }
+
+    // 485
+    private static MethodType MT_bootstrap485 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap485 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap485", MT_bootstrap485 ());
+    }
+
+    private static MethodHandle INDY_call485;
+    private static MethodHandle INDY_call485 () throws Throwable {
+        if (INDY_call485 != null) return INDY_call485;
+        CallSite cs = (CallSite) MH_bootstrap485 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap485 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper485 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call485 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap485 (Object l, Object n, Object t) throws Throwable { return _mh[ 485 ].invokeExact(l, n, t); }
+
+    // 486
+    private static MethodType MT_bootstrap486 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap486 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap486", MT_bootstrap486 ());
+    }
+
+    private static MethodHandle INDY_call486;
+    private static MethodHandle INDY_call486 () throws Throwable {
+        if (INDY_call486 != null) return INDY_call486;
+        CallSite cs = (CallSite) MH_bootstrap486 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap486 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper486 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call486 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap486 (Object l, Object n, Object t) throws Throwable { return _mh[ 486 ].invokeExact(l, n, t); }
+
+    // 487
+    private static MethodType MT_bootstrap487 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap487 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap487", MT_bootstrap487 ());
+    }
+
+    private static MethodHandle INDY_call487;
+    private static MethodHandle INDY_call487 () throws Throwable {
+        if (INDY_call487 != null) return INDY_call487;
+        CallSite cs = (CallSite) MH_bootstrap487 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap487 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper487 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call487 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap487 (Object l, Object n, Object t) throws Throwable { return _mh[ 487 ].invokeExact(l, n, t); }
+
+    // 488
+    private static MethodType MT_bootstrap488 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap488 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap488", MT_bootstrap488 ());
+    }
+
+    private static MethodHandle INDY_call488;
+    private static MethodHandle INDY_call488 () throws Throwable {
+        if (INDY_call488 != null) return INDY_call488;
+        CallSite cs = (CallSite) MH_bootstrap488 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap488 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper488 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call488 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap488 (Object l, Object n, Object t) throws Throwable { return _mh[ 488 ].invokeExact(l, n, t); }
+
+    // 489
+    private static MethodType MT_bootstrap489 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap489 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap489", MT_bootstrap489 ());
+    }
+
+    private static MethodHandle INDY_call489;
+    private static MethodHandle INDY_call489 () throws Throwable {
+        if (INDY_call489 != null) return INDY_call489;
+        CallSite cs = (CallSite) MH_bootstrap489 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap489 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper489 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call489 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap489 (Object l, Object n, Object t) throws Throwable { return _mh[ 489 ].invokeExact(l, n, t); }
+
+    // 490
+    private static MethodType MT_bootstrap490 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap490 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap490", MT_bootstrap490 ());
+    }
+
+    private static MethodHandle INDY_call490;
+    private static MethodHandle INDY_call490 () throws Throwable {
+        if (INDY_call490 != null) return INDY_call490;
+        CallSite cs = (CallSite) MH_bootstrap490 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap490 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper490 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call490 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap490 (Object l, Object n, Object t) throws Throwable { return _mh[ 490 ].invokeExact(l, n, t); }
+
+    // 491
+    private static MethodType MT_bootstrap491 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap491 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap491", MT_bootstrap491 ());
+    }
+
+    private static MethodHandle INDY_call491;
+    private static MethodHandle INDY_call491 () throws Throwable {
+        if (INDY_call491 != null) return INDY_call491;
+        CallSite cs = (CallSite) MH_bootstrap491 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap491 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper491 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call491 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap491 (Object l, Object n, Object t) throws Throwable { return _mh[ 491 ].invokeExact(l, n, t); }
+
+    // 492
+    private static MethodType MT_bootstrap492 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap492 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap492", MT_bootstrap492 ());
+    }
+
+    private static MethodHandle INDY_call492;
+    private static MethodHandle INDY_call492 () throws Throwable {
+        if (INDY_call492 != null) return INDY_call492;
+        CallSite cs = (CallSite) MH_bootstrap492 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap492 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper492 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call492 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap492 (Object l, Object n, Object t) throws Throwable { return _mh[ 492 ].invokeExact(l, n, t); }
+
+    // 493
+    private static MethodType MT_bootstrap493 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap493 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap493", MT_bootstrap493 ());
+    }
+
+    private static MethodHandle INDY_call493;
+    private static MethodHandle INDY_call493 () throws Throwable {
+        if (INDY_call493 != null) return INDY_call493;
+        CallSite cs = (CallSite) MH_bootstrap493 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap493 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper493 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call493 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap493 (Object l, Object n, Object t) throws Throwable { return _mh[ 493 ].invokeExact(l, n, t); }
+
+    // 494
+    private static MethodType MT_bootstrap494 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap494 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap494", MT_bootstrap494 ());
+    }
+
+    private static MethodHandle INDY_call494;
+    private static MethodHandle INDY_call494 () throws Throwable {
+        if (INDY_call494 != null) return INDY_call494;
+        CallSite cs = (CallSite) MH_bootstrap494 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap494 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper494 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call494 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap494 (Object l, Object n, Object t) throws Throwable { return _mh[ 494 ].invokeExact(l, n, t); }
+
+    // 495
+    private static MethodType MT_bootstrap495 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap495 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap495", MT_bootstrap495 ());
+    }
+
+    private static MethodHandle INDY_call495;
+    private static MethodHandle INDY_call495 () throws Throwable {
+        if (INDY_call495 != null) return INDY_call495;
+        CallSite cs = (CallSite) MH_bootstrap495 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap495 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper495 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call495 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap495 (Object l, Object n, Object t) throws Throwable { return _mh[ 495 ].invokeExact(l, n, t); }
+
+    // 496
+    private static MethodType MT_bootstrap496 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap496 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap496", MT_bootstrap496 ());
+    }
+
+    private static MethodHandle INDY_call496;
+    private static MethodHandle INDY_call496 () throws Throwable {
+        if (INDY_call496 != null) return INDY_call496;
+        CallSite cs = (CallSite) MH_bootstrap496 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap496 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper496 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call496 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap496 (Object l, Object n, Object t) throws Throwable { return _mh[ 496 ].invokeExact(l, n, t); }
+
+    // 497
+    private static MethodType MT_bootstrap497 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap497 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap497", MT_bootstrap497 ());
+    }
+
+    private static MethodHandle INDY_call497;
+    private static MethodHandle INDY_call497 () throws Throwable {
+        if (INDY_call497 != null) return INDY_call497;
+        CallSite cs = (CallSite) MH_bootstrap497 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap497 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper497 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call497 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap497 (Object l, Object n, Object t) throws Throwable { return _mh[ 497 ].invokeExact(l, n, t); }
+
+    // 498
+    private static MethodType MT_bootstrap498 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap498 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap498", MT_bootstrap498 ());
+    }
+
+    private static MethodHandle INDY_call498;
+    private static MethodHandle INDY_call498 () throws Throwable {
+        if (INDY_call498 != null) return INDY_call498;
+        CallSite cs = (CallSite) MH_bootstrap498 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap498 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper498 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call498 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap498 (Object l, Object n, Object t) throws Throwable { return _mh[ 498 ].invokeExact(l, n, t); }
+
+    // 499
+    private static MethodType MT_bootstrap499 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap499 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap499", MT_bootstrap499 ());
+    }
+
+    private static MethodHandle INDY_call499;
+    private static MethodHandle INDY_call499 () throws Throwable {
+        if (INDY_call499 != null) return INDY_call499;
+        CallSite cs = (CallSite) MH_bootstrap499 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap499 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper499 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call499 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap499 (Object l, Object n, Object t) throws Throwable { return _mh[ 499 ].invokeExact(l, n, t); }
+
+    // 500
+    private static MethodType MT_bootstrap500 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap500 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap500", MT_bootstrap500 ());
+    }
+
+    private static MethodHandle INDY_call500;
+    private static MethodHandle INDY_call500 () throws Throwable {
+        if (INDY_call500 != null) return INDY_call500;
+        CallSite cs = (CallSite) MH_bootstrap500 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap500 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper500 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call500 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap500 (Object l, Object n, Object t) throws Throwable { return _mh[ 500 ].invokeExact(l, n, t); }
+
+    // 501
+    private static MethodType MT_bootstrap501 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap501 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap501", MT_bootstrap501 ());
+    }
+
+    private static MethodHandle INDY_call501;
+    private static MethodHandle INDY_call501 () throws Throwable {
+        if (INDY_call501 != null) return INDY_call501;
+        CallSite cs = (CallSite) MH_bootstrap501 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap501 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper501 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call501 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap501 (Object l, Object n, Object t) throws Throwable { return _mh[ 501 ].invokeExact(l, n, t); }
+
+    // 502
+    private static MethodType MT_bootstrap502 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap502 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap502", MT_bootstrap502 ());
+    }
+
+    private static MethodHandle INDY_call502;
+    private static MethodHandle INDY_call502 () throws Throwable {
+        if (INDY_call502 != null) return INDY_call502;
+        CallSite cs = (CallSite) MH_bootstrap502 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap502 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper502 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call502 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap502 (Object l, Object n, Object t) throws Throwable { return _mh[ 502 ].invokeExact(l, n, t); }
+
+    // 503
+    private static MethodType MT_bootstrap503 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap503 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap503", MT_bootstrap503 ());
+    }
+
+    private static MethodHandle INDY_call503;
+    private static MethodHandle INDY_call503 () throws Throwable {
+        if (INDY_call503 != null) return INDY_call503;
+        CallSite cs = (CallSite) MH_bootstrap503 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap503 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper503 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call503 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap503 (Object l, Object n, Object t) throws Throwable { return _mh[ 503 ].invokeExact(l, n, t); }
+
+    // 504
+    private static MethodType MT_bootstrap504 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap504 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap504", MT_bootstrap504 ());
+    }
+
+    private static MethodHandle INDY_call504;
+    private static MethodHandle INDY_call504 () throws Throwable {
+        if (INDY_call504 != null) return INDY_call504;
+        CallSite cs = (CallSite) MH_bootstrap504 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap504 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper504 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call504 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap504 (Object l, Object n, Object t) throws Throwable { return _mh[ 504 ].invokeExact(l, n, t); }
+
+    // 505
+    private static MethodType MT_bootstrap505 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap505 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap505", MT_bootstrap505 ());
+    }
+
+    private static MethodHandle INDY_call505;
+    private static MethodHandle INDY_call505 () throws Throwable {
+        if (INDY_call505 != null) return INDY_call505;
+        CallSite cs = (CallSite) MH_bootstrap505 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap505 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper505 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call505 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap505 (Object l, Object n, Object t) throws Throwable { return _mh[ 505 ].invokeExact(l, n, t); }
+
+    // 506
+    private static MethodType MT_bootstrap506 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap506 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap506", MT_bootstrap506 ());
+    }
+
+    private static MethodHandle INDY_call506;
+    private static MethodHandle INDY_call506 () throws Throwable {
+        if (INDY_call506 != null) return INDY_call506;
+        CallSite cs = (CallSite) MH_bootstrap506 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap506 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper506 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call506 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap506 (Object l, Object n, Object t) throws Throwable { return _mh[ 506 ].invokeExact(l, n, t); }
+
+    // 507
+    private static MethodType MT_bootstrap507 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap507 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap507", MT_bootstrap507 ());
+    }
+
+    private static MethodHandle INDY_call507;
+    private static MethodHandle INDY_call507 () throws Throwable {
+        if (INDY_call507 != null) return INDY_call507;
+        CallSite cs = (CallSite) MH_bootstrap507 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap507 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper507 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call507 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap507 (Object l, Object n, Object t) throws Throwable { return _mh[ 507 ].invokeExact(l, n, t); }
+
+    // 508
+    private static MethodType MT_bootstrap508 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap508 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap508", MT_bootstrap508 ());
+    }
+
+    private static MethodHandle INDY_call508;
+    private static MethodHandle INDY_call508 () throws Throwable {
+        if (INDY_call508 != null) return INDY_call508;
+        CallSite cs = (CallSite) MH_bootstrap508 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap508 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper508 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call508 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap508 (Object l, Object n, Object t) throws Throwable { return _mh[ 508 ].invokeExact(l, n, t); }
+
+    // 509
+    private static MethodType MT_bootstrap509 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap509 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap509", MT_bootstrap509 ());
+    }
+
+    private static MethodHandle INDY_call509;
+    private static MethodHandle INDY_call509 () throws Throwable {
+        if (INDY_call509 != null) return INDY_call509;
+        CallSite cs = (CallSite) MH_bootstrap509 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap509 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper509 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call509 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap509 (Object l, Object n, Object t) throws Throwable { return _mh[ 509 ].invokeExact(l, n, t); }
+
+    // 510
+    private static MethodType MT_bootstrap510 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap510 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap510", MT_bootstrap510 ());
+    }
+
+    private static MethodHandle INDY_call510;
+    private static MethodHandle INDY_call510 () throws Throwable {
+        if (INDY_call510 != null) return INDY_call510;
+        CallSite cs = (CallSite) MH_bootstrap510 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap510 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper510 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call510 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap510 (Object l, Object n, Object t) throws Throwable { return _mh[ 510 ].invokeExact(l, n, t); }
+
+    // 511
+    private static MethodType MT_bootstrap511 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap511 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap511", MT_bootstrap511 ());
+    }
+
+    private static MethodHandle INDY_call511;
+    private static MethodHandle INDY_call511 () throws Throwable {
+        if (INDY_call511 != null) return INDY_call511;
+        CallSite cs = (CallSite) MH_bootstrap511 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap511 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper511 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call511 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap511 (Object l, Object n, Object t) throws Throwable { return _mh[ 511 ].invokeExact(l, n, t); }
+
+    // 512
+    private static MethodType MT_bootstrap512 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap512 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap512", MT_bootstrap512 ());
+    }
+
+    private static MethodHandle INDY_call512;
+    private static MethodHandle INDY_call512 () throws Throwable {
+        if (INDY_call512 != null) return INDY_call512;
+        CallSite cs = (CallSite) MH_bootstrap512 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap512 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper512 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call512 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap512 (Object l, Object n, Object t) throws Throwable { return _mh[ 512 ].invokeExact(l, n, t); }
+
+    // 513
+    private static MethodType MT_bootstrap513 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap513 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap513", MT_bootstrap513 ());
+    }
+
+    private static MethodHandle INDY_call513;
+    private static MethodHandle INDY_call513 () throws Throwable {
+        if (INDY_call513 != null) return INDY_call513;
+        CallSite cs = (CallSite) MH_bootstrap513 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap513 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper513 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call513 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap513 (Object l, Object n, Object t) throws Throwable { return _mh[ 513 ].invokeExact(l, n, t); }
+
+    // 514
+    private static MethodType MT_bootstrap514 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap514 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap514", MT_bootstrap514 ());
+    }
+
+    private static MethodHandle INDY_call514;
+    private static MethodHandle INDY_call514 () throws Throwable {
+        if (INDY_call514 != null) return INDY_call514;
+        CallSite cs = (CallSite) MH_bootstrap514 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap514 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper514 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call514 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap514 (Object l, Object n, Object t) throws Throwable { return _mh[ 514 ].invokeExact(l, n, t); }
+
+    // 515
+    private static MethodType MT_bootstrap515 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap515 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap515", MT_bootstrap515 ());
+    }
+
+    private static MethodHandle INDY_call515;
+    private static MethodHandle INDY_call515 () throws Throwable {
+        if (INDY_call515 != null) return INDY_call515;
+        CallSite cs = (CallSite) MH_bootstrap515 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap515 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper515 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call515 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap515 (Object l, Object n, Object t) throws Throwable { return _mh[ 515 ].invokeExact(l, n, t); }
+
+    // 516
+    private static MethodType MT_bootstrap516 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap516 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap516", MT_bootstrap516 ());
+    }
+
+    private static MethodHandle INDY_call516;
+    private static MethodHandle INDY_call516 () throws Throwable {
+        if (INDY_call516 != null) return INDY_call516;
+        CallSite cs = (CallSite) MH_bootstrap516 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap516 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper516 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call516 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap516 (Object l, Object n, Object t) throws Throwable { return _mh[ 516 ].invokeExact(l, n, t); }
+
+    // 517
+    private static MethodType MT_bootstrap517 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap517 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap517", MT_bootstrap517 ());
+    }
+
+    private static MethodHandle INDY_call517;
+    private static MethodHandle INDY_call517 () throws Throwable {
+        if (INDY_call517 != null) return INDY_call517;
+        CallSite cs = (CallSite) MH_bootstrap517 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap517 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper517 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call517 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap517 (Object l, Object n, Object t) throws Throwable { return _mh[ 517 ].invokeExact(l, n, t); }
+
+    // 518
+    private static MethodType MT_bootstrap518 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap518 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap518", MT_bootstrap518 ());
+    }
+
+    private static MethodHandle INDY_call518;
+    private static MethodHandle INDY_call518 () throws Throwable {
+        if (INDY_call518 != null) return INDY_call518;
+        CallSite cs = (CallSite) MH_bootstrap518 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap518 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper518 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call518 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap518 (Object l, Object n, Object t) throws Throwable { return _mh[ 518 ].invokeExact(l, n, t); }
+
+    // 519
+    private static MethodType MT_bootstrap519 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap519 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap519", MT_bootstrap519 ());
+    }
+
+    private static MethodHandle INDY_call519;
+    private static MethodHandle INDY_call519 () throws Throwable {
+        if (INDY_call519 != null) return INDY_call519;
+        CallSite cs = (CallSite) MH_bootstrap519 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap519 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper519 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call519 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap519 (Object l, Object n, Object t) throws Throwable { return _mh[ 519 ].invokeExact(l, n, t); }
+
+    // 520
+    private static MethodType MT_bootstrap520 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap520 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap520", MT_bootstrap520 ());
+    }
+
+    private static MethodHandle INDY_call520;
+    private static MethodHandle INDY_call520 () throws Throwable {
+        if (INDY_call520 != null) return INDY_call520;
+        CallSite cs = (CallSite) MH_bootstrap520 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap520 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper520 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call520 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap520 (Object l, Object n, Object t) throws Throwable { return _mh[ 520 ].invokeExact(l, n, t); }
+
+    // 521
+    private static MethodType MT_bootstrap521 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap521 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap521", MT_bootstrap521 ());
+    }
+
+    private static MethodHandle INDY_call521;
+    private static MethodHandle INDY_call521 () throws Throwable {
+        if (INDY_call521 != null) return INDY_call521;
+        CallSite cs = (CallSite) MH_bootstrap521 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap521 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper521 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call521 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap521 (Object l, Object n, Object t) throws Throwable { return _mh[ 521 ].invokeExact(l, n, t); }
+
+    // 522
+    private static MethodType MT_bootstrap522 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap522 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap522", MT_bootstrap522 ());
+    }
+
+    private static MethodHandle INDY_call522;
+    private static MethodHandle INDY_call522 () throws Throwable {
+        if (INDY_call522 != null) return INDY_call522;
+        CallSite cs = (CallSite) MH_bootstrap522 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap522 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper522 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call522 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap522 (Object l, Object n, Object t) throws Throwable { return _mh[ 522 ].invokeExact(l, n, t); }
+
+    // 523
+    private static MethodType MT_bootstrap523 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap523 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap523", MT_bootstrap523 ());
+    }
+
+    private static MethodHandle INDY_call523;
+    private static MethodHandle INDY_call523 () throws Throwable {
+        if (INDY_call523 != null) return INDY_call523;
+        CallSite cs = (CallSite) MH_bootstrap523 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap523 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper523 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call523 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap523 (Object l, Object n, Object t) throws Throwable { return _mh[ 523 ].invokeExact(l, n, t); }
+
+    // 524
+    private static MethodType MT_bootstrap524 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap524 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap524", MT_bootstrap524 ());
+    }
+
+    private static MethodHandle INDY_call524;
+    private static MethodHandle INDY_call524 () throws Throwable {
+        if (INDY_call524 != null) return INDY_call524;
+        CallSite cs = (CallSite) MH_bootstrap524 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap524 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper524 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call524 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap524 (Object l, Object n, Object t) throws Throwable { return _mh[ 524 ].invokeExact(l, n, t); }
+
+    // 525
+    private static MethodType MT_bootstrap525 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap525 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap525", MT_bootstrap525 ());
+    }
+
+    private static MethodHandle INDY_call525;
+    private static MethodHandle INDY_call525 () throws Throwable {
+        if (INDY_call525 != null) return INDY_call525;
+        CallSite cs = (CallSite) MH_bootstrap525 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap525 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper525 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call525 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap525 (Object l, Object n, Object t) throws Throwable { return _mh[ 525 ].invokeExact(l, n, t); }
+
+    // 526
+    private static MethodType MT_bootstrap526 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap526 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap526", MT_bootstrap526 ());
+    }
+
+    private static MethodHandle INDY_call526;
+    private static MethodHandle INDY_call526 () throws Throwable {
+        if (INDY_call526 != null) return INDY_call526;
+        CallSite cs = (CallSite) MH_bootstrap526 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap526 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper526 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call526 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap526 (Object l, Object n, Object t) throws Throwable { return _mh[ 526 ].invokeExact(l, n, t); }
+
+    // 527
+    private static MethodType MT_bootstrap527 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap527 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap527", MT_bootstrap527 ());
+    }
+
+    private static MethodHandle INDY_call527;
+    private static MethodHandle INDY_call527 () throws Throwable {
+        if (INDY_call527 != null) return INDY_call527;
+        CallSite cs = (CallSite) MH_bootstrap527 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap527 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper527 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call527 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap527 (Object l, Object n, Object t) throws Throwable { return _mh[ 527 ].invokeExact(l, n, t); }
+
+    // 528
+    private static MethodType MT_bootstrap528 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap528 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap528", MT_bootstrap528 ());
+    }
+
+    private static MethodHandle INDY_call528;
+    private static MethodHandle INDY_call528 () throws Throwable {
+        if (INDY_call528 != null) return INDY_call528;
+        CallSite cs = (CallSite) MH_bootstrap528 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap528 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper528 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call528 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap528 (Object l, Object n, Object t) throws Throwable { return _mh[ 528 ].invokeExact(l, n, t); }
+
+    // 529
+    private static MethodType MT_bootstrap529 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap529 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap529", MT_bootstrap529 ());
+    }
+
+    private static MethodHandle INDY_call529;
+    private static MethodHandle INDY_call529 () throws Throwable {
+        if (INDY_call529 != null) return INDY_call529;
+        CallSite cs = (CallSite) MH_bootstrap529 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap529 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper529 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call529 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap529 (Object l, Object n, Object t) throws Throwable { return _mh[ 529 ].invokeExact(l, n, t); }
+
+    // 530
+    private static MethodType MT_bootstrap530 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap530 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap530", MT_bootstrap530 ());
+    }
+
+    private static MethodHandle INDY_call530;
+    private static MethodHandle INDY_call530 () throws Throwable {
+        if (INDY_call530 != null) return INDY_call530;
+        CallSite cs = (CallSite) MH_bootstrap530 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap530 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper530 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call530 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap530 (Object l, Object n, Object t) throws Throwable { return _mh[ 530 ].invokeExact(l, n, t); }
+
+    // 531
+    private static MethodType MT_bootstrap531 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap531 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap531", MT_bootstrap531 ());
+    }
+
+    private static MethodHandle INDY_call531;
+    private static MethodHandle INDY_call531 () throws Throwable {
+        if (INDY_call531 != null) return INDY_call531;
+        CallSite cs = (CallSite) MH_bootstrap531 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap531 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper531 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call531 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap531 (Object l, Object n, Object t) throws Throwable { return _mh[ 531 ].invokeExact(l, n, t); }
+
+    // 532
+    private static MethodType MT_bootstrap532 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap532 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap532", MT_bootstrap532 ());
+    }
+
+    private static MethodHandle INDY_call532;
+    private static MethodHandle INDY_call532 () throws Throwable {
+        if (INDY_call532 != null) return INDY_call532;
+        CallSite cs = (CallSite) MH_bootstrap532 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap532 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper532 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call532 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap532 (Object l, Object n, Object t) throws Throwable { return _mh[ 532 ].invokeExact(l, n, t); }
+
+    // 533
+    private static MethodType MT_bootstrap533 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap533 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap533", MT_bootstrap533 ());
+    }
+
+    private static MethodHandle INDY_call533;
+    private static MethodHandle INDY_call533 () throws Throwable {
+        if (INDY_call533 != null) return INDY_call533;
+        CallSite cs = (CallSite) MH_bootstrap533 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap533 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper533 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call533 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap533 (Object l, Object n, Object t) throws Throwable { return _mh[ 533 ].invokeExact(l, n, t); }
+
+    // 534
+    private static MethodType MT_bootstrap534 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap534 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap534", MT_bootstrap534 ());
+    }
+
+    private static MethodHandle INDY_call534;
+    private static MethodHandle INDY_call534 () throws Throwable {
+        if (INDY_call534 != null) return INDY_call534;
+        CallSite cs = (CallSite) MH_bootstrap534 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap534 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper534 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call534 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap534 (Object l, Object n, Object t) throws Throwable { return _mh[ 534 ].invokeExact(l, n, t); }
+
+    // 535
+    private static MethodType MT_bootstrap535 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap535 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap535", MT_bootstrap535 ());
+    }
+
+    private static MethodHandle INDY_call535;
+    private static MethodHandle INDY_call535 () throws Throwable {
+        if (INDY_call535 != null) return INDY_call535;
+        CallSite cs = (CallSite) MH_bootstrap535 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap535 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper535 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call535 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap535 (Object l, Object n, Object t) throws Throwable { return _mh[ 535 ].invokeExact(l, n, t); }
+
+    // 536
+    private static MethodType MT_bootstrap536 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap536 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap536", MT_bootstrap536 ());
+    }
+
+    private static MethodHandle INDY_call536;
+    private static MethodHandle INDY_call536 () throws Throwable {
+        if (INDY_call536 != null) return INDY_call536;
+        CallSite cs = (CallSite) MH_bootstrap536 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap536 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper536 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call536 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap536 (Object l, Object n, Object t) throws Throwable { return _mh[ 536 ].invokeExact(l, n, t); }
+
+    // 537
+    private static MethodType MT_bootstrap537 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap537 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap537", MT_bootstrap537 ());
+    }
+
+    private static MethodHandle INDY_call537;
+    private static MethodHandle INDY_call537 () throws Throwable {
+        if (INDY_call537 != null) return INDY_call537;
+        CallSite cs = (CallSite) MH_bootstrap537 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap537 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper537 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call537 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap537 (Object l, Object n, Object t) throws Throwable { return _mh[ 537 ].invokeExact(l, n, t); }
+
+    // 538
+    private static MethodType MT_bootstrap538 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap538 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap538", MT_bootstrap538 ());
+    }
+
+    private static MethodHandle INDY_call538;
+    private static MethodHandle INDY_call538 () throws Throwable {
+        if (INDY_call538 != null) return INDY_call538;
+        CallSite cs = (CallSite) MH_bootstrap538 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap538 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper538 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call538 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap538 (Object l, Object n, Object t) throws Throwable { return _mh[ 538 ].invokeExact(l, n, t); }
+
+    // 539
+    private static MethodType MT_bootstrap539 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap539 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap539", MT_bootstrap539 ());
+    }
+
+    private static MethodHandle INDY_call539;
+    private static MethodHandle INDY_call539 () throws Throwable {
+        if (INDY_call539 != null) return INDY_call539;
+        CallSite cs = (CallSite) MH_bootstrap539 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap539 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper539 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call539 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap539 (Object l, Object n, Object t) throws Throwable { return _mh[ 539 ].invokeExact(l, n, t); }
+
+    // 540
+    private static MethodType MT_bootstrap540 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap540 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap540", MT_bootstrap540 ());
+    }
+
+    private static MethodHandle INDY_call540;
+    private static MethodHandle INDY_call540 () throws Throwable {
+        if (INDY_call540 != null) return INDY_call540;
+        CallSite cs = (CallSite) MH_bootstrap540 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap540 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper540 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call540 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap540 (Object l, Object n, Object t) throws Throwable { return _mh[ 540 ].invokeExact(l, n, t); }
+
+    // 541
+    private static MethodType MT_bootstrap541 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap541 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap541", MT_bootstrap541 ());
+    }
+
+    private static MethodHandle INDY_call541;
+    private static MethodHandle INDY_call541 () throws Throwable {
+        if (INDY_call541 != null) return INDY_call541;
+        CallSite cs = (CallSite) MH_bootstrap541 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap541 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper541 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call541 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap541 (Object l, Object n, Object t) throws Throwable { return _mh[ 541 ].invokeExact(l, n, t); }
+
+    // 542
+    private static MethodType MT_bootstrap542 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap542 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap542", MT_bootstrap542 ());
+    }
+
+    private static MethodHandle INDY_call542;
+    private static MethodHandle INDY_call542 () throws Throwable {
+        if (INDY_call542 != null) return INDY_call542;
+        CallSite cs = (CallSite) MH_bootstrap542 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap542 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper542 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call542 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap542 (Object l, Object n, Object t) throws Throwable { return _mh[ 542 ].invokeExact(l, n, t); }
+
+    // 543
+    private static MethodType MT_bootstrap543 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap543 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap543", MT_bootstrap543 ());
+    }
+
+    private static MethodHandle INDY_call543;
+    private static MethodHandle INDY_call543 () throws Throwable {
+        if (INDY_call543 != null) return INDY_call543;
+        CallSite cs = (CallSite) MH_bootstrap543 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap543 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper543 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call543 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap543 (Object l, Object n, Object t) throws Throwable { return _mh[ 543 ].invokeExact(l, n, t); }
+
+    // 544
+    private static MethodType MT_bootstrap544 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap544 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap544", MT_bootstrap544 ());
+    }
+
+    private static MethodHandle INDY_call544;
+    private static MethodHandle INDY_call544 () throws Throwable {
+        if (INDY_call544 != null) return INDY_call544;
+        CallSite cs = (CallSite) MH_bootstrap544 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap544 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper544 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call544 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap544 (Object l, Object n, Object t) throws Throwable { return _mh[ 544 ].invokeExact(l, n, t); }
+
+    // 545
+    private static MethodType MT_bootstrap545 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap545 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap545", MT_bootstrap545 ());
+    }
+
+    private static MethodHandle INDY_call545;
+    private static MethodHandle INDY_call545 () throws Throwable {
+        if (INDY_call545 != null) return INDY_call545;
+        CallSite cs = (CallSite) MH_bootstrap545 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap545 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper545 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call545 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap545 (Object l, Object n, Object t) throws Throwable { return _mh[ 545 ].invokeExact(l, n, t); }
+
+    // 546
+    private static MethodType MT_bootstrap546 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap546 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap546", MT_bootstrap546 ());
+    }
+
+    private static MethodHandle INDY_call546;
+    private static MethodHandle INDY_call546 () throws Throwable {
+        if (INDY_call546 != null) return INDY_call546;
+        CallSite cs = (CallSite) MH_bootstrap546 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap546 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper546 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call546 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap546 (Object l, Object n, Object t) throws Throwable { return _mh[ 546 ].invokeExact(l, n, t); }
+
+    // 547
+    private static MethodType MT_bootstrap547 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap547 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap547", MT_bootstrap547 ());
+    }
+
+    private static MethodHandle INDY_call547;
+    private static MethodHandle INDY_call547 () throws Throwable {
+        if (INDY_call547 != null) return INDY_call547;
+        CallSite cs = (CallSite) MH_bootstrap547 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap547 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper547 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call547 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap547 (Object l, Object n, Object t) throws Throwable { return _mh[ 547 ].invokeExact(l, n, t); }
+
+    // 548
+    private static MethodType MT_bootstrap548 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap548 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap548", MT_bootstrap548 ());
+    }
+
+    private static MethodHandle INDY_call548;
+    private static MethodHandle INDY_call548 () throws Throwable {
+        if (INDY_call548 != null) return INDY_call548;
+        CallSite cs = (CallSite) MH_bootstrap548 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap548 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper548 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call548 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap548 (Object l, Object n, Object t) throws Throwable { return _mh[ 548 ].invokeExact(l, n, t); }
+
+    // 549
+    private static MethodType MT_bootstrap549 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap549 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap549", MT_bootstrap549 ());
+    }
+
+    private static MethodHandle INDY_call549;
+    private static MethodHandle INDY_call549 () throws Throwable {
+        if (INDY_call549 != null) return INDY_call549;
+        CallSite cs = (CallSite) MH_bootstrap549 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap549 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper549 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call549 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap549 (Object l, Object n, Object t) throws Throwable { return _mh[ 549 ].invokeExact(l, n, t); }
+
+    // 550
+    private static MethodType MT_bootstrap550 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap550 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap550", MT_bootstrap550 ());
+    }
+
+    private static MethodHandle INDY_call550;
+    private static MethodHandle INDY_call550 () throws Throwable {
+        if (INDY_call550 != null) return INDY_call550;
+        CallSite cs = (CallSite) MH_bootstrap550 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap550 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper550 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call550 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap550 (Object l, Object n, Object t) throws Throwable { return _mh[ 550 ].invokeExact(l, n, t); }
+
+    // 551
+    private static MethodType MT_bootstrap551 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap551 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap551", MT_bootstrap551 ());
+    }
+
+    private static MethodHandle INDY_call551;
+    private static MethodHandle INDY_call551 () throws Throwable {
+        if (INDY_call551 != null) return INDY_call551;
+        CallSite cs = (CallSite) MH_bootstrap551 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap551 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper551 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call551 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap551 (Object l, Object n, Object t) throws Throwable { return _mh[ 551 ].invokeExact(l, n, t); }
+
+    // 552
+    private static MethodType MT_bootstrap552 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap552 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap552", MT_bootstrap552 ());
+    }
+
+    private static MethodHandle INDY_call552;
+    private static MethodHandle INDY_call552 () throws Throwable {
+        if (INDY_call552 != null) return INDY_call552;
+        CallSite cs = (CallSite) MH_bootstrap552 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap552 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper552 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call552 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap552 (Object l, Object n, Object t) throws Throwable { return _mh[ 552 ].invokeExact(l, n, t); }
+
+    // 553
+    private static MethodType MT_bootstrap553 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap553 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap553", MT_bootstrap553 ());
+    }
+
+    private static MethodHandle INDY_call553;
+    private static MethodHandle INDY_call553 () throws Throwable {
+        if (INDY_call553 != null) return INDY_call553;
+        CallSite cs = (CallSite) MH_bootstrap553 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap553 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper553 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call553 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap553 (Object l, Object n, Object t) throws Throwable { return _mh[ 553 ].invokeExact(l, n, t); }
+
+    // 554
+    private static MethodType MT_bootstrap554 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap554 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap554", MT_bootstrap554 ());
+    }
+
+    private static MethodHandle INDY_call554;
+    private static MethodHandle INDY_call554 () throws Throwable {
+        if (INDY_call554 != null) return INDY_call554;
+        CallSite cs = (CallSite) MH_bootstrap554 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap554 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper554 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call554 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap554 (Object l, Object n, Object t) throws Throwable { return _mh[ 554 ].invokeExact(l, n, t); }
+
+    // 555
+    private static MethodType MT_bootstrap555 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap555 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap555", MT_bootstrap555 ());
+    }
+
+    private static MethodHandle INDY_call555;
+    private static MethodHandle INDY_call555 () throws Throwable {
+        if (INDY_call555 != null) return INDY_call555;
+        CallSite cs = (CallSite) MH_bootstrap555 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap555 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper555 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call555 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap555 (Object l, Object n, Object t) throws Throwable { return _mh[ 555 ].invokeExact(l, n, t); }
+
+    // 556
+    private static MethodType MT_bootstrap556 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap556 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap556", MT_bootstrap556 ());
+    }
+
+    private static MethodHandle INDY_call556;
+    private static MethodHandle INDY_call556 () throws Throwable {
+        if (INDY_call556 != null) return INDY_call556;
+        CallSite cs = (CallSite) MH_bootstrap556 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap556 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper556 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call556 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap556 (Object l, Object n, Object t) throws Throwable { return _mh[ 556 ].invokeExact(l, n, t); }
+
+    // 557
+    private static MethodType MT_bootstrap557 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap557 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap557", MT_bootstrap557 ());
+    }
+
+    private static MethodHandle INDY_call557;
+    private static MethodHandle INDY_call557 () throws Throwable {
+        if (INDY_call557 != null) return INDY_call557;
+        CallSite cs = (CallSite) MH_bootstrap557 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap557 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper557 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call557 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap557 (Object l, Object n, Object t) throws Throwable { return _mh[ 557 ].invokeExact(l, n, t); }
+
+    // 558
+    private static MethodType MT_bootstrap558 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap558 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap558", MT_bootstrap558 ());
+    }
+
+    private static MethodHandle INDY_call558;
+    private static MethodHandle INDY_call558 () throws Throwable {
+        if (INDY_call558 != null) return INDY_call558;
+        CallSite cs = (CallSite) MH_bootstrap558 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap558 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper558 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call558 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap558 (Object l, Object n, Object t) throws Throwable { return _mh[ 558 ].invokeExact(l, n, t); }
+
+    // 559
+    private static MethodType MT_bootstrap559 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap559 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap559", MT_bootstrap559 ());
+    }
+
+    private static MethodHandle INDY_call559;
+    private static MethodHandle INDY_call559 () throws Throwable {
+        if (INDY_call559 != null) return INDY_call559;
+        CallSite cs = (CallSite) MH_bootstrap559 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap559 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper559 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call559 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap559 (Object l, Object n, Object t) throws Throwable { return _mh[ 559 ].invokeExact(l, n, t); }
+
+    // 560
+    private static MethodType MT_bootstrap560 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap560 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap560", MT_bootstrap560 ());
+    }
+
+    private static MethodHandle INDY_call560;
+    private static MethodHandle INDY_call560 () throws Throwable {
+        if (INDY_call560 != null) return INDY_call560;
+        CallSite cs = (CallSite) MH_bootstrap560 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap560 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper560 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call560 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap560 (Object l, Object n, Object t) throws Throwable { return _mh[ 560 ].invokeExact(l, n, t); }
+
+    // 561
+    private static MethodType MT_bootstrap561 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap561 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap561", MT_bootstrap561 ());
+    }
+
+    private static MethodHandle INDY_call561;
+    private static MethodHandle INDY_call561 () throws Throwable {
+        if (INDY_call561 != null) return INDY_call561;
+        CallSite cs = (CallSite) MH_bootstrap561 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap561 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper561 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call561 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap561 (Object l, Object n, Object t) throws Throwable { return _mh[ 561 ].invokeExact(l, n, t); }
+
+    // 562
+    private static MethodType MT_bootstrap562 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap562 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap562", MT_bootstrap562 ());
+    }
+
+    private static MethodHandle INDY_call562;
+    private static MethodHandle INDY_call562 () throws Throwable {
+        if (INDY_call562 != null) return INDY_call562;
+        CallSite cs = (CallSite) MH_bootstrap562 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap562 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper562 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call562 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap562 (Object l, Object n, Object t) throws Throwable { return _mh[ 562 ].invokeExact(l, n, t); }
+
+    // 563
+    private static MethodType MT_bootstrap563 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap563 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap563", MT_bootstrap563 ());
+    }
+
+    private static MethodHandle INDY_call563;
+    private static MethodHandle INDY_call563 () throws Throwable {
+        if (INDY_call563 != null) return INDY_call563;
+        CallSite cs = (CallSite) MH_bootstrap563 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap563 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper563 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call563 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap563 (Object l, Object n, Object t) throws Throwable { return _mh[ 563 ].invokeExact(l, n, t); }
+
+    // 564
+    private static MethodType MT_bootstrap564 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap564 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap564", MT_bootstrap564 ());
+    }
+
+    private static MethodHandle INDY_call564;
+    private static MethodHandle INDY_call564 () throws Throwable {
+        if (INDY_call564 != null) return INDY_call564;
+        CallSite cs = (CallSite) MH_bootstrap564 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap564 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper564 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call564 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap564 (Object l, Object n, Object t) throws Throwable { return _mh[ 564 ].invokeExact(l, n, t); }
+
+    // 565
+    private static MethodType MT_bootstrap565 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap565 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap565", MT_bootstrap565 ());
+    }
+
+    private static MethodHandle INDY_call565;
+    private static MethodHandle INDY_call565 () throws Throwable {
+        if (INDY_call565 != null) return INDY_call565;
+        CallSite cs = (CallSite) MH_bootstrap565 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap565 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper565 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call565 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap565 (Object l, Object n, Object t) throws Throwable { return _mh[ 565 ].invokeExact(l, n, t); }
+
+    // 566
+    private static MethodType MT_bootstrap566 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap566 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap566", MT_bootstrap566 ());
+    }
+
+    private static MethodHandle INDY_call566;
+    private static MethodHandle INDY_call566 () throws Throwable {
+        if (INDY_call566 != null) return INDY_call566;
+        CallSite cs = (CallSite) MH_bootstrap566 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap566 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper566 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call566 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap566 (Object l, Object n, Object t) throws Throwable { return _mh[ 566 ].invokeExact(l, n, t); }
+
+    // 567
+    private static MethodType MT_bootstrap567 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap567 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap567", MT_bootstrap567 ());
+    }
+
+    private static MethodHandle INDY_call567;
+    private static MethodHandle INDY_call567 () throws Throwable {
+        if (INDY_call567 != null) return INDY_call567;
+        CallSite cs = (CallSite) MH_bootstrap567 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap567 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper567 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call567 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap567 (Object l, Object n, Object t) throws Throwable { return _mh[ 567 ].invokeExact(l, n, t); }
+
+    // 568
+    private static MethodType MT_bootstrap568 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap568 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap568", MT_bootstrap568 ());
+    }
+
+    private static MethodHandle INDY_call568;
+    private static MethodHandle INDY_call568 () throws Throwable {
+        if (INDY_call568 != null) return INDY_call568;
+        CallSite cs = (CallSite) MH_bootstrap568 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap568 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper568 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call568 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap568 (Object l, Object n, Object t) throws Throwable { return _mh[ 568 ].invokeExact(l, n, t); }
+
+    // 569
+    private static MethodType MT_bootstrap569 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap569 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap569", MT_bootstrap569 ());
+    }
+
+    private static MethodHandle INDY_call569;
+    private static MethodHandle INDY_call569 () throws Throwable {
+        if (INDY_call569 != null) return INDY_call569;
+        CallSite cs = (CallSite) MH_bootstrap569 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap569 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper569 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call569 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap569 (Object l, Object n, Object t) throws Throwable { return _mh[ 569 ].invokeExact(l, n, t); }
+
+    // 570
+    private static MethodType MT_bootstrap570 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap570 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap570", MT_bootstrap570 ());
+    }
+
+    private static MethodHandle INDY_call570;
+    private static MethodHandle INDY_call570 () throws Throwable {
+        if (INDY_call570 != null) return INDY_call570;
+        CallSite cs = (CallSite) MH_bootstrap570 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap570 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper570 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call570 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap570 (Object l, Object n, Object t) throws Throwable { return _mh[ 570 ].invokeExact(l, n, t); }
+
+    // 571
+    private static MethodType MT_bootstrap571 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap571 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap571", MT_bootstrap571 ());
+    }
+
+    private static MethodHandle INDY_call571;
+    private static MethodHandle INDY_call571 () throws Throwable {
+        if (INDY_call571 != null) return INDY_call571;
+        CallSite cs = (CallSite) MH_bootstrap571 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap571 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper571 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call571 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap571 (Object l, Object n, Object t) throws Throwable { return _mh[ 571 ].invokeExact(l, n, t); }
+
+    // 572
+    private static MethodType MT_bootstrap572 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap572 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap572", MT_bootstrap572 ());
+    }
+
+    private static MethodHandle INDY_call572;
+    private static MethodHandle INDY_call572 () throws Throwable {
+        if (INDY_call572 != null) return INDY_call572;
+        CallSite cs = (CallSite) MH_bootstrap572 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap572 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper572 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call572 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap572 (Object l, Object n, Object t) throws Throwable { return _mh[ 572 ].invokeExact(l, n, t); }
+
+    // 573
+    private static MethodType MT_bootstrap573 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap573 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap573", MT_bootstrap573 ());
+    }
+
+    private static MethodHandle INDY_call573;
+    private static MethodHandle INDY_call573 () throws Throwable {
+        if (INDY_call573 != null) return INDY_call573;
+        CallSite cs = (CallSite) MH_bootstrap573 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap573 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper573 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call573 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap573 (Object l, Object n, Object t) throws Throwable { return _mh[ 573 ].invokeExact(l, n, t); }
+
+    // 574
+    private static MethodType MT_bootstrap574 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap574 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap574", MT_bootstrap574 ());
+    }
+
+    private static MethodHandle INDY_call574;
+    private static MethodHandle INDY_call574 () throws Throwable {
+        if (INDY_call574 != null) return INDY_call574;
+        CallSite cs = (CallSite) MH_bootstrap574 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap574 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper574 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call574 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap574 (Object l, Object n, Object t) throws Throwable { return _mh[ 574 ].invokeExact(l, n, t); }
+
+    // 575
+    private static MethodType MT_bootstrap575 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap575 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap575", MT_bootstrap575 ());
+    }
+
+    private static MethodHandle INDY_call575;
+    private static MethodHandle INDY_call575 () throws Throwable {
+        if (INDY_call575 != null) return INDY_call575;
+        CallSite cs = (CallSite) MH_bootstrap575 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap575 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper575 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call575 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap575 (Object l, Object n, Object t) throws Throwable { return _mh[ 575 ].invokeExact(l, n, t); }
+
+    // 576
+    private static MethodType MT_bootstrap576 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap576 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap576", MT_bootstrap576 ());
+    }
+
+    private static MethodHandle INDY_call576;
+    private static MethodHandle INDY_call576 () throws Throwable {
+        if (INDY_call576 != null) return INDY_call576;
+        CallSite cs = (CallSite) MH_bootstrap576 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap576 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper576 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call576 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap576 (Object l, Object n, Object t) throws Throwable { return _mh[ 576 ].invokeExact(l, n, t); }
+
+    // 577
+    private static MethodType MT_bootstrap577 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap577 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap577", MT_bootstrap577 ());
+    }
+
+    private static MethodHandle INDY_call577;
+    private static MethodHandle INDY_call577 () throws Throwable {
+        if (INDY_call577 != null) return INDY_call577;
+        CallSite cs = (CallSite) MH_bootstrap577 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap577 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper577 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call577 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap577 (Object l, Object n, Object t) throws Throwable { return _mh[ 577 ].invokeExact(l, n, t); }
+
+    // 578
+    private static MethodType MT_bootstrap578 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap578 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap578", MT_bootstrap578 ());
+    }
+
+    private static MethodHandle INDY_call578;
+    private static MethodHandle INDY_call578 () throws Throwable {
+        if (INDY_call578 != null) return INDY_call578;
+        CallSite cs = (CallSite) MH_bootstrap578 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap578 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper578 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call578 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap578 (Object l, Object n, Object t) throws Throwable { return _mh[ 578 ].invokeExact(l, n, t); }
+
+    // 579
+    private static MethodType MT_bootstrap579 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap579 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap579", MT_bootstrap579 ());
+    }
+
+    private static MethodHandle INDY_call579;
+    private static MethodHandle INDY_call579 () throws Throwable {
+        if (INDY_call579 != null) return INDY_call579;
+        CallSite cs = (CallSite) MH_bootstrap579 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap579 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper579 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call579 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap579 (Object l, Object n, Object t) throws Throwable { return _mh[ 579 ].invokeExact(l, n, t); }
+
+    // 580
+    private static MethodType MT_bootstrap580 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap580 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap580", MT_bootstrap580 ());
+    }
+
+    private static MethodHandle INDY_call580;
+    private static MethodHandle INDY_call580 () throws Throwable {
+        if (INDY_call580 != null) return INDY_call580;
+        CallSite cs = (CallSite) MH_bootstrap580 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap580 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper580 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call580 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap580 (Object l, Object n, Object t) throws Throwable { return _mh[ 580 ].invokeExact(l, n, t); }
+
+    // 581
+    private static MethodType MT_bootstrap581 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap581 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap581", MT_bootstrap581 ());
+    }
+
+    private static MethodHandle INDY_call581;
+    private static MethodHandle INDY_call581 () throws Throwable {
+        if (INDY_call581 != null) return INDY_call581;
+        CallSite cs = (CallSite) MH_bootstrap581 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap581 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper581 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call581 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap581 (Object l, Object n, Object t) throws Throwable { return _mh[ 581 ].invokeExact(l, n, t); }
+
+    // 582
+    private static MethodType MT_bootstrap582 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap582 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap582", MT_bootstrap582 ());
+    }
+
+    private static MethodHandle INDY_call582;
+    private static MethodHandle INDY_call582 () throws Throwable {
+        if (INDY_call582 != null) return INDY_call582;
+        CallSite cs = (CallSite) MH_bootstrap582 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap582 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper582 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call582 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap582 (Object l, Object n, Object t) throws Throwable { return _mh[ 582 ].invokeExact(l, n, t); }
+
+    // 583
+    private static MethodType MT_bootstrap583 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap583 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap583", MT_bootstrap583 ());
+    }
+
+    private static MethodHandle INDY_call583;
+    private static MethodHandle INDY_call583 () throws Throwable {
+        if (INDY_call583 != null) return INDY_call583;
+        CallSite cs = (CallSite) MH_bootstrap583 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap583 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper583 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call583 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap583 (Object l, Object n, Object t) throws Throwable { return _mh[ 583 ].invokeExact(l, n, t); }
+
+    // 584
+    private static MethodType MT_bootstrap584 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap584 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap584", MT_bootstrap584 ());
+    }
+
+    private static MethodHandle INDY_call584;
+    private static MethodHandle INDY_call584 () throws Throwable {
+        if (INDY_call584 != null) return INDY_call584;
+        CallSite cs = (CallSite) MH_bootstrap584 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap584 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper584 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call584 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap584 (Object l, Object n, Object t) throws Throwable { return _mh[ 584 ].invokeExact(l, n, t); }
+
+    // 585
+    private static MethodType MT_bootstrap585 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap585 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap585", MT_bootstrap585 ());
+    }
+
+    private static MethodHandle INDY_call585;
+    private static MethodHandle INDY_call585 () throws Throwable {
+        if (INDY_call585 != null) return INDY_call585;
+        CallSite cs = (CallSite) MH_bootstrap585 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap585 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper585 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call585 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap585 (Object l, Object n, Object t) throws Throwable { return _mh[ 585 ].invokeExact(l, n, t); }
+
+    // 586
+    private static MethodType MT_bootstrap586 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap586 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap586", MT_bootstrap586 ());
+    }
+
+    private static MethodHandle INDY_call586;
+    private static MethodHandle INDY_call586 () throws Throwable {
+        if (INDY_call586 != null) return INDY_call586;
+        CallSite cs = (CallSite) MH_bootstrap586 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap586 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper586 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call586 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap586 (Object l, Object n, Object t) throws Throwable { return _mh[ 586 ].invokeExact(l, n, t); }
+
+    // 587
+    private static MethodType MT_bootstrap587 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap587 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap587", MT_bootstrap587 ());
+    }
+
+    private static MethodHandle INDY_call587;
+    private static MethodHandle INDY_call587 () throws Throwable {
+        if (INDY_call587 != null) return INDY_call587;
+        CallSite cs = (CallSite) MH_bootstrap587 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap587 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper587 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call587 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap587 (Object l, Object n, Object t) throws Throwable { return _mh[ 587 ].invokeExact(l, n, t); }
+
+    // 588
+    private static MethodType MT_bootstrap588 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap588 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap588", MT_bootstrap588 ());
+    }
+
+    private static MethodHandle INDY_call588;
+    private static MethodHandle INDY_call588 () throws Throwable {
+        if (INDY_call588 != null) return INDY_call588;
+        CallSite cs = (CallSite) MH_bootstrap588 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap588 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper588 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call588 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap588 (Object l, Object n, Object t) throws Throwable { return _mh[ 588 ].invokeExact(l, n, t); }
+
+    // 589
+    private static MethodType MT_bootstrap589 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap589 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap589", MT_bootstrap589 ());
+    }
+
+    private static MethodHandle INDY_call589;
+    private static MethodHandle INDY_call589 () throws Throwable {
+        if (INDY_call589 != null) return INDY_call589;
+        CallSite cs = (CallSite) MH_bootstrap589 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap589 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper589 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call589 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap589 (Object l, Object n, Object t) throws Throwable { return _mh[ 589 ].invokeExact(l, n, t); }
+
+    // 590
+    private static MethodType MT_bootstrap590 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap590 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap590", MT_bootstrap590 ());
+    }
+
+    private static MethodHandle INDY_call590;
+    private static MethodHandle INDY_call590 () throws Throwable {
+        if (INDY_call590 != null) return INDY_call590;
+        CallSite cs = (CallSite) MH_bootstrap590 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap590 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper590 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call590 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap590 (Object l, Object n, Object t) throws Throwable { return _mh[ 590 ].invokeExact(l, n, t); }
+
+    // 591
+    private static MethodType MT_bootstrap591 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap591 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap591", MT_bootstrap591 ());
+    }
+
+    private static MethodHandle INDY_call591;
+    private static MethodHandle INDY_call591 () throws Throwable {
+        if (INDY_call591 != null) return INDY_call591;
+        CallSite cs = (CallSite) MH_bootstrap591 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap591 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper591 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call591 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap591 (Object l, Object n, Object t) throws Throwable { return _mh[ 591 ].invokeExact(l, n, t); }
+
+    // 592
+    private static MethodType MT_bootstrap592 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap592 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap592", MT_bootstrap592 ());
+    }
+
+    private static MethodHandle INDY_call592;
+    private static MethodHandle INDY_call592 () throws Throwable {
+        if (INDY_call592 != null) return INDY_call592;
+        CallSite cs = (CallSite) MH_bootstrap592 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap592 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper592 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call592 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap592 (Object l, Object n, Object t) throws Throwable { return _mh[ 592 ].invokeExact(l, n, t); }
+
+    // 593
+    private static MethodType MT_bootstrap593 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap593 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap593", MT_bootstrap593 ());
+    }
+
+    private static MethodHandle INDY_call593;
+    private static MethodHandle INDY_call593 () throws Throwable {
+        if (INDY_call593 != null) return INDY_call593;
+        CallSite cs = (CallSite) MH_bootstrap593 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap593 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper593 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call593 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap593 (Object l, Object n, Object t) throws Throwable { return _mh[ 593 ].invokeExact(l, n, t); }
+
+    // 594
+    private static MethodType MT_bootstrap594 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap594 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap594", MT_bootstrap594 ());
+    }
+
+    private static MethodHandle INDY_call594;
+    private static MethodHandle INDY_call594 () throws Throwable {
+        if (INDY_call594 != null) return INDY_call594;
+        CallSite cs = (CallSite) MH_bootstrap594 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap594 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper594 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call594 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap594 (Object l, Object n, Object t) throws Throwable { return _mh[ 594 ].invokeExact(l, n, t); }
+
+    // 595
+    private static MethodType MT_bootstrap595 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap595 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap595", MT_bootstrap595 ());
+    }
+
+    private static MethodHandle INDY_call595;
+    private static MethodHandle INDY_call595 () throws Throwable {
+        if (INDY_call595 != null) return INDY_call595;
+        CallSite cs = (CallSite) MH_bootstrap595 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap595 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper595 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call595 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap595 (Object l, Object n, Object t) throws Throwable { return _mh[ 595 ].invokeExact(l, n, t); }
+
+    // 596
+    private static MethodType MT_bootstrap596 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap596 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap596", MT_bootstrap596 ());
+    }
+
+    private static MethodHandle INDY_call596;
+    private static MethodHandle INDY_call596 () throws Throwable {
+        if (INDY_call596 != null) return INDY_call596;
+        CallSite cs = (CallSite) MH_bootstrap596 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap596 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper596 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call596 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap596 (Object l, Object n, Object t) throws Throwable { return _mh[ 596 ].invokeExact(l, n, t); }
+
+    // 597
+    private static MethodType MT_bootstrap597 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap597 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap597", MT_bootstrap597 ());
+    }
+
+    private static MethodHandle INDY_call597;
+    private static MethodHandle INDY_call597 () throws Throwable {
+        if (INDY_call597 != null) return INDY_call597;
+        CallSite cs = (CallSite) MH_bootstrap597 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap597 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper597 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call597 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap597 (Object l, Object n, Object t) throws Throwable { return _mh[ 597 ].invokeExact(l, n, t); }
+
+    // 598
+    private static MethodType MT_bootstrap598 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap598 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap598", MT_bootstrap598 ());
+    }
+
+    private static MethodHandle INDY_call598;
+    private static MethodHandle INDY_call598 () throws Throwable {
+        if (INDY_call598 != null) return INDY_call598;
+        CallSite cs = (CallSite) MH_bootstrap598 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap598 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper598 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call598 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap598 (Object l, Object n, Object t) throws Throwable { return _mh[ 598 ].invokeExact(l, n, t); }
+
+    // 599
+    private static MethodType MT_bootstrap599 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap599 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap599", MT_bootstrap599 ());
+    }
+
+    private static MethodHandle INDY_call599;
+    private static MethodHandle INDY_call599 () throws Throwable {
+        if (INDY_call599 != null) return INDY_call599;
+        CallSite cs = (CallSite) MH_bootstrap599 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap599 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper599 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call599 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap599 (Object l, Object n, Object t) throws Throwable { return _mh[ 599 ].invokeExact(l, n, t); }
+
+    // 600
+    private static MethodType MT_bootstrap600 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap600 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap600", MT_bootstrap600 ());
+    }
+
+    private static MethodHandle INDY_call600;
+    private static MethodHandle INDY_call600 () throws Throwable {
+        if (INDY_call600 != null) return INDY_call600;
+        CallSite cs = (CallSite) MH_bootstrap600 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap600 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper600 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call600 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap600 (Object l, Object n, Object t) throws Throwable { return _mh[ 600 ].invokeExact(l, n, t); }
+
+    // 601
+    private static MethodType MT_bootstrap601 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap601 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap601", MT_bootstrap601 ());
+    }
+
+    private static MethodHandle INDY_call601;
+    private static MethodHandle INDY_call601 () throws Throwable {
+        if (INDY_call601 != null) return INDY_call601;
+        CallSite cs = (CallSite) MH_bootstrap601 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap601 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper601 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call601 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap601 (Object l, Object n, Object t) throws Throwable { return _mh[ 601 ].invokeExact(l, n, t); }
+
+    // 602
+    private static MethodType MT_bootstrap602 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap602 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap602", MT_bootstrap602 ());
+    }
+
+    private static MethodHandle INDY_call602;
+    private static MethodHandle INDY_call602 () throws Throwable {
+        if (INDY_call602 != null) return INDY_call602;
+        CallSite cs = (CallSite) MH_bootstrap602 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap602 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper602 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call602 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap602 (Object l, Object n, Object t) throws Throwable { return _mh[ 602 ].invokeExact(l, n, t); }
+
+    // 603
+    private static MethodType MT_bootstrap603 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap603 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap603", MT_bootstrap603 ());
+    }
+
+    private static MethodHandle INDY_call603;
+    private static MethodHandle INDY_call603 () throws Throwable {
+        if (INDY_call603 != null) return INDY_call603;
+        CallSite cs = (CallSite) MH_bootstrap603 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap603 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper603 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call603 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap603 (Object l, Object n, Object t) throws Throwable { return _mh[ 603 ].invokeExact(l, n, t); }
+
+    // 604
+    private static MethodType MT_bootstrap604 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap604 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap604", MT_bootstrap604 ());
+    }
+
+    private static MethodHandle INDY_call604;
+    private static MethodHandle INDY_call604 () throws Throwable {
+        if (INDY_call604 != null) return INDY_call604;
+        CallSite cs = (CallSite) MH_bootstrap604 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap604 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper604 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call604 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap604 (Object l, Object n, Object t) throws Throwable { return _mh[ 604 ].invokeExact(l, n, t); }
+
+    // 605
+    private static MethodType MT_bootstrap605 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap605 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap605", MT_bootstrap605 ());
+    }
+
+    private static MethodHandle INDY_call605;
+    private static MethodHandle INDY_call605 () throws Throwable {
+        if (INDY_call605 != null) return INDY_call605;
+        CallSite cs = (CallSite) MH_bootstrap605 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap605 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper605 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call605 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap605 (Object l, Object n, Object t) throws Throwable { return _mh[ 605 ].invokeExact(l, n, t); }
+
+    // 606
+    private static MethodType MT_bootstrap606 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap606 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap606", MT_bootstrap606 ());
+    }
+
+    private static MethodHandle INDY_call606;
+    private static MethodHandle INDY_call606 () throws Throwable {
+        if (INDY_call606 != null) return INDY_call606;
+        CallSite cs = (CallSite) MH_bootstrap606 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap606 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper606 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call606 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap606 (Object l, Object n, Object t) throws Throwable { return _mh[ 606 ].invokeExact(l, n, t); }
+
+    // 607
+    private static MethodType MT_bootstrap607 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap607 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap607", MT_bootstrap607 ());
+    }
+
+    private static MethodHandle INDY_call607;
+    private static MethodHandle INDY_call607 () throws Throwable {
+        if (INDY_call607 != null) return INDY_call607;
+        CallSite cs = (CallSite) MH_bootstrap607 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap607 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper607 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call607 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap607 (Object l, Object n, Object t) throws Throwable { return _mh[ 607 ].invokeExact(l, n, t); }
+
+    // 608
+    private static MethodType MT_bootstrap608 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap608 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap608", MT_bootstrap608 ());
+    }
+
+    private static MethodHandle INDY_call608;
+    private static MethodHandle INDY_call608 () throws Throwable {
+        if (INDY_call608 != null) return INDY_call608;
+        CallSite cs = (CallSite) MH_bootstrap608 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap608 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper608 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call608 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap608 (Object l, Object n, Object t) throws Throwable { return _mh[ 608 ].invokeExact(l, n, t); }
+
+    // 609
+    private static MethodType MT_bootstrap609 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap609 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap609", MT_bootstrap609 ());
+    }
+
+    private static MethodHandle INDY_call609;
+    private static MethodHandle INDY_call609 () throws Throwable {
+        if (INDY_call609 != null) return INDY_call609;
+        CallSite cs = (CallSite) MH_bootstrap609 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap609 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper609 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call609 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap609 (Object l, Object n, Object t) throws Throwable { return _mh[ 609 ].invokeExact(l, n, t); }
+
+    // 610
+    private static MethodType MT_bootstrap610 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap610 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap610", MT_bootstrap610 ());
+    }
+
+    private static MethodHandle INDY_call610;
+    private static MethodHandle INDY_call610 () throws Throwable {
+        if (INDY_call610 != null) return INDY_call610;
+        CallSite cs = (CallSite) MH_bootstrap610 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap610 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper610 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call610 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap610 (Object l, Object n, Object t) throws Throwable { return _mh[ 610 ].invokeExact(l, n, t); }
+
+    // 611
+    private static MethodType MT_bootstrap611 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap611 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap611", MT_bootstrap611 ());
+    }
+
+    private static MethodHandle INDY_call611;
+    private static MethodHandle INDY_call611 () throws Throwable {
+        if (INDY_call611 != null) return INDY_call611;
+        CallSite cs = (CallSite) MH_bootstrap611 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap611 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper611 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call611 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap611 (Object l, Object n, Object t) throws Throwable { return _mh[ 611 ].invokeExact(l, n, t); }
+
+    // 612
+    private static MethodType MT_bootstrap612 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap612 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap612", MT_bootstrap612 ());
+    }
+
+    private static MethodHandle INDY_call612;
+    private static MethodHandle INDY_call612 () throws Throwable {
+        if (INDY_call612 != null) return INDY_call612;
+        CallSite cs = (CallSite) MH_bootstrap612 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap612 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper612 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call612 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap612 (Object l, Object n, Object t) throws Throwable { return _mh[ 612 ].invokeExact(l, n, t); }
+
+    // 613
+    private static MethodType MT_bootstrap613 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap613 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap613", MT_bootstrap613 ());
+    }
+
+    private static MethodHandle INDY_call613;
+    private static MethodHandle INDY_call613 () throws Throwable {
+        if (INDY_call613 != null) return INDY_call613;
+        CallSite cs = (CallSite) MH_bootstrap613 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap613 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper613 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call613 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap613 (Object l, Object n, Object t) throws Throwable { return _mh[ 613 ].invokeExact(l, n, t); }
+
+    // 614
+    private static MethodType MT_bootstrap614 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap614 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap614", MT_bootstrap614 ());
+    }
+
+    private static MethodHandle INDY_call614;
+    private static MethodHandle INDY_call614 () throws Throwable {
+        if (INDY_call614 != null) return INDY_call614;
+        CallSite cs = (CallSite) MH_bootstrap614 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap614 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper614 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call614 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap614 (Object l, Object n, Object t) throws Throwable { return _mh[ 614 ].invokeExact(l, n, t); }
+
+    // 615
+    private static MethodType MT_bootstrap615 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap615 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap615", MT_bootstrap615 ());
+    }
+
+    private static MethodHandle INDY_call615;
+    private static MethodHandle INDY_call615 () throws Throwable {
+        if (INDY_call615 != null) return INDY_call615;
+        CallSite cs = (CallSite) MH_bootstrap615 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap615 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper615 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call615 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap615 (Object l, Object n, Object t) throws Throwable { return _mh[ 615 ].invokeExact(l, n, t); }
+
+    // 616
+    private static MethodType MT_bootstrap616 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap616 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap616", MT_bootstrap616 ());
+    }
+
+    private static MethodHandle INDY_call616;
+    private static MethodHandle INDY_call616 () throws Throwable {
+        if (INDY_call616 != null) return INDY_call616;
+        CallSite cs = (CallSite) MH_bootstrap616 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap616 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper616 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call616 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap616 (Object l, Object n, Object t) throws Throwable { return _mh[ 616 ].invokeExact(l, n, t); }
+
+    // 617
+    private static MethodType MT_bootstrap617 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap617 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap617", MT_bootstrap617 ());
+    }
+
+    private static MethodHandle INDY_call617;
+    private static MethodHandle INDY_call617 () throws Throwable {
+        if (INDY_call617 != null) return INDY_call617;
+        CallSite cs = (CallSite) MH_bootstrap617 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap617 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper617 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call617 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap617 (Object l, Object n, Object t) throws Throwable { return _mh[ 617 ].invokeExact(l, n, t); }
+
+    // 618
+    private static MethodType MT_bootstrap618 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap618 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap618", MT_bootstrap618 ());
+    }
+
+    private static MethodHandle INDY_call618;
+    private static MethodHandle INDY_call618 () throws Throwable {
+        if (INDY_call618 != null) return INDY_call618;
+        CallSite cs = (CallSite) MH_bootstrap618 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap618 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper618 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call618 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap618 (Object l, Object n, Object t) throws Throwable { return _mh[ 618 ].invokeExact(l, n, t); }
+
+    // 619
+    private static MethodType MT_bootstrap619 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap619 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap619", MT_bootstrap619 ());
+    }
+
+    private static MethodHandle INDY_call619;
+    private static MethodHandle INDY_call619 () throws Throwable {
+        if (INDY_call619 != null) return INDY_call619;
+        CallSite cs = (CallSite) MH_bootstrap619 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap619 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper619 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call619 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap619 (Object l, Object n, Object t) throws Throwable { return _mh[ 619 ].invokeExact(l, n, t); }
+
+    // 620
+    private static MethodType MT_bootstrap620 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap620 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap620", MT_bootstrap620 ());
+    }
+
+    private static MethodHandle INDY_call620;
+    private static MethodHandle INDY_call620 () throws Throwable {
+        if (INDY_call620 != null) return INDY_call620;
+        CallSite cs = (CallSite) MH_bootstrap620 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap620 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper620 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call620 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap620 (Object l, Object n, Object t) throws Throwable { return _mh[ 620 ].invokeExact(l, n, t); }
+
+    // 621
+    private static MethodType MT_bootstrap621 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap621 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap621", MT_bootstrap621 ());
+    }
+
+    private static MethodHandle INDY_call621;
+    private static MethodHandle INDY_call621 () throws Throwable {
+        if (INDY_call621 != null) return INDY_call621;
+        CallSite cs = (CallSite) MH_bootstrap621 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap621 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper621 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call621 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap621 (Object l, Object n, Object t) throws Throwable { return _mh[ 621 ].invokeExact(l, n, t); }
+
+    // 622
+    private static MethodType MT_bootstrap622 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap622 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap622", MT_bootstrap622 ());
+    }
+
+    private static MethodHandle INDY_call622;
+    private static MethodHandle INDY_call622 () throws Throwable {
+        if (INDY_call622 != null) return INDY_call622;
+        CallSite cs = (CallSite) MH_bootstrap622 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap622 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper622 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call622 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap622 (Object l, Object n, Object t) throws Throwable { return _mh[ 622 ].invokeExact(l, n, t); }
+
+    // 623
+    private static MethodType MT_bootstrap623 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap623 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap623", MT_bootstrap623 ());
+    }
+
+    private static MethodHandle INDY_call623;
+    private static MethodHandle INDY_call623 () throws Throwable {
+        if (INDY_call623 != null) return INDY_call623;
+        CallSite cs = (CallSite) MH_bootstrap623 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap623 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper623 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call623 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap623 (Object l, Object n, Object t) throws Throwable { return _mh[ 623 ].invokeExact(l, n, t); }
+
+    // 624
+    private static MethodType MT_bootstrap624 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap624 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap624", MT_bootstrap624 ());
+    }
+
+    private static MethodHandle INDY_call624;
+    private static MethodHandle INDY_call624 () throws Throwable {
+        if (INDY_call624 != null) return INDY_call624;
+        CallSite cs = (CallSite) MH_bootstrap624 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap624 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper624 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call624 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap624 (Object l, Object n, Object t) throws Throwable { return _mh[ 624 ].invokeExact(l, n, t); }
+
+    // 625
+    private static MethodType MT_bootstrap625 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap625 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap625", MT_bootstrap625 ());
+    }
+
+    private static MethodHandle INDY_call625;
+    private static MethodHandle INDY_call625 () throws Throwable {
+        if (INDY_call625 != null) return INDY_call625;
+        CallSite cs = (CallSite) MH_bootstrap625 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap625 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper625 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call625 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap625 (Object l, Object n, Object t) throws Throwable { return _mh[ 625 ].invokeExact(l, n, t); }
+
+    // 626
+    private static MethodType MT_bootstrap626 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap626 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap626", MT_bootstrap626 ());
+    }
+
+    private static MethodHandle INDY_call626;
+    private static MethodHandle INDY_call626 () throws Throwable {
+        if (INDY_call626 != null) return INDY_call626;
+        CallSite cs = (CallSite) MH_bootstrap626 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap626 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper626 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call626 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap626 (Object l, Object n, Object t) throws Throwable { return _mh[ 626 ].invokeExact(l, n, t); }
+
+    // 627
+    private static MethodType MT_bootstrap627 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap627 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap627", MT_bootstrap627 ());
+    }
+
+    private static MethodHandle INDY_call627;
+    private static MethodHandle INDY_call627 () throws Throwable {
+        if (INDY_call627 != null) return INDY_call627;
+        CallSite cs = (CallSite) MH_bootstrap627 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap627 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper627 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call627 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap627 (Object l, Object n, Object t) throws Throwable { return _mh[ 627 ].invokeExact(l, n, t); }
+
+    // 628
+    private static MethodType MT_bootstrap628 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap628 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap628", MT_bootstrap628 ());
+    }
+
+    private static MethodHandle INDY_call628;
+    private static MethodHandle INDY_call628 () throws Throwable {
+        if (INDY_call628 != null) return INDY_call628;
+        CallSite cs = (CallSite) MH_bootstrap628 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap628 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper628 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call628 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap628 (Object l, Object n, Object t) throws Throwable { return _mh[ 628 ].invokeExact(l, n, t); }
+
+    // 629
+    private static MethodType MT_bootstrap629 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap629 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap629", MT_bootstrap629 ());
+    }
+
+    private static MethodHandle INDY_call629;
+    private static MethodHandle INDY_call629 () throws Throwable {
+        if (INDY_call629 != null) return INDY_call629;
+        CallSite cs = (CallSite) MH_bootstrap629 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap629 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper629 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call629 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap629 (Object l, Object n, Object t) throws Throwable { return _mh[ 629 ].invokeExact(l, n, t); }
+
+    // 630
+    private static MethodType MT_bootstrap630 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap630 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap630", MT_bootstrap630 ());
+    }
+
+    private static MethodHandle INDY_call630;
+    private static MethodHandle INDY_call630 () throws Throwable {
+        if (INDY_call630 != null) return INDY_call630;
+        CallSite cs = (CallSite) MH_bootstrap630 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap630 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper630 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call630 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap630 (Object l, Object n, Object t) throws Throwable { return _mh[ 630 ].invokeExact(l, n, t); }
+
+    // 631
+    private static MethodType MT_bootstrap631 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap631 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap631", MT_bootstrap631 ());
+    }
+
+    private static MethodHandle INDY_call631;
+    private static MethodHandle INDY_call631 () throws Throwable {
+        if (INDY_call631 != null) return INDY_call631;
+        CallSite cs = (CallSite) MH_bootstrap631 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap631 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper631 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call631 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap631 (Object l, Object n, Object t) throws Throwable { return _mh[ 631 ].invokeExact(l, n, t); }
+
+    // 632
+    private static MethodType MT_bootstrap632 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap632 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap632", MT_bootstrap632 ());
+    }
+
+    private static MethodHandle INDY_call632;
+    private static MethodHandle INDY_call632 () throws Throwable {
+        if (INDY_call632 != null) return INDY_call632;
+        CallSite cs = (CallSite) MH_bootstrap632 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap632 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper632 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call632 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap632 (Object l, Object n, Object t) throws Throwable { return _mh[ 632 ].invokeExact(l, n, t); }
+
+    // 633
+    private static MethodType MT_bootstrap633 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap633 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap633", MT_bootstrap633 ());
+    }
+
+    private static MethodHandle INDY_call633;
+    private static MethodHandle INDY_call633 () throws Throwable {
+        if (INDY_call633 != null) return INDY_call633;
+        CallSite cs = (CallSite) MH_bootstrap633 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap633 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper633 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call633 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap633 (Object l, Object n, Object t) throws Throwable { return _mh[ 633 ].invokeExact(l, n, t); }
+
+    // 634
+    private static MethodType MT_bootstrap634 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap634 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap634", MT_bootstrap634 ());
+    }
+
+    private static MethodHandle INDY_call634;
+    private static MethodHandle INDY_call634 () throws Throwable {
+        if (INDY_call634 != null) return INDY_call634;
+        CallSite cs = (CallSite) MH_bootstrap634 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap634 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper634 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call634 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap634 (Object l, Object n, Object t) throws Throwable { return _mh[ 634 ].invokeExact(l, n, t); }
+
+    // 635
+    private static MethodType MT_bootstrap635 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap635 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap635", MT_bootstrap635 ());
+    }
+
+    private static MethodHandle INDY_call635;
+    private static MethodHandle INDY_call635 () throws Throwable {
+        if (INDY_call635 != null) return INDY_call635;
+        CallSite cs = (CallSite) MH_bootstrap635 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap635 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper635 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call635 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap635 (Object l, Object n, Object t) throws Throwable { return _mh[ 635 ].invokeExact(l, n, t); }
+
+    // 636
+    private static MethodType MT_bootstrap636 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap636 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap636", MT_bootstrap636 ());
+    }
+
+    private static MethodHandle INDY_call636;
+    private static MethodHandle INDY_call636 () throws Throwable {
+        if (INDY_call636 != null) return INDY_call636;
+        CallSite cs = (CallSite) MH_bootstrap636 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap636 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper636 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call636 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap636 (Object l, Object n, Object t) throws Throwable { return _mh[ 636 ].invokeExact(l, n, t); }
+
+    // 637
+    private static MethodType MT_bootstrap637 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap637 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap637", MT_bootstrap637 ());
+    }
+
+    private static MethodHandle INDY_call637;
+    private static MethodHandle INDY_call637 () throws Throwable {
+        if (INDY_call637 != null) return INDY_call637;
+        CallSite cs = (CallSite) MH_bootstrap637 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap637 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper637 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call637 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap637 (Object l, Object n, Object t) throws Throwable { return _mh[ 637 ].invokeExact(l, n, t); }
+
+    // 638
+    private static MethodType MT_bootstrap638 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap638 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap638", MT_bootstrap638 ());
+    }
+
+    private static MethodHandle INDY_call638;
+    private static MethodHandle INDY_call638 () throws Throwable {
+        if (INDY_call638 != null) return INDY_call638;
+        CallSite cs = (CallSite) MH_bootstrap638 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap638 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper638 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call638 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap638 (Object l, Object n, Object t) throws Throwable { return _mh[ 638 ].invokeExact(l, n, t); }
+
+    // 639
+    private static MethodType MT_bootstrap639 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap639 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap639", MT_bootstrap639 ());
+    }
+
+    private static MethodHandle INDY_call639;
+    private static MethodHandle INDY_call639 () throws Throwable {
+        if (INDY_call639 != null) return INDY_call639;
+        CallSite cs = (CallSite) MH_bootstrap639 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap639 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper639 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call639 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap639 (Object l, Object n, Object t) throws Throwable { return _mh[ 639 ].invokeExact(l, n, t); }
+
+    // 640
+    private static MethodType MT_bootstrap640 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap640 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap640", MT_bootstrap640 ());
+    }
+
+    private static MethodHandle INDY_call640;
+    private static MethodHandle INDY_call640 () throws Throwable {
+        if (INDY_call640 != null) return INDY_call640;
+        CallSite cs = (CallSite) MH_bootstrap640 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap640 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper640 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call640 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap640 (Object l, Object n, Object t) throws Throwable { return _mh[ 640 ].invokeExact(l, n, t); }
+
+    // 641
+    private static MethodType MT_bootstrap641 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap641 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap641", MT_bootstrap641 ());
+    }
+
+    private static MethodHandle INDY_call641;
+    private static MethodHandle INDY_call641 () throws Throwable {
+        if (INDY_call641 != null) return INDY_call641;
+        CallSite cs = (CallSite) MH_bootstrap641 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap641 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper641 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call641 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap641 (Object l, Object n, Object t) throws Throwable { return _mh[ 641 ].invokeExact(l, n, t); }
+
+    // 642
+    private static MethodType MT_bootstrap642 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap642 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap642", MT_bootstrap642 ());
+    }
+
+    private static MethodHandle INDY_call642;
+    private static MethodHandle INDY_call642 () throws Throwable {
+        if (INDY_call642 != null) return INDY_call642;
+        CallSite cs = (CallSite) MH_bootstrap642 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap642 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper642 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call642 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap642 (Object l, Object n, Object t) throws Throwable { return _mh[ 642 ].invokeExact(l, n, t); }
+
+    // 643
+    private static MethodType MT_bootstrap643 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap643 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap643", MT_bootstrap643 ());
+    }
+
+    private static MethodHandle INDY_call643;
+    private static MethodHandle INDY_call643 () throws Throwable {
+        if (INDY_call643 != null) return INDY_call643;
+        CallSite cs = (CallSite) MH_bootstrap643 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap643 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper643 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call643 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap643 (Object l, Object n, Object t) throws Throwable { return _mh[ 643 ].invokeExact(l, n, t); }
+
+    // 644
+    private static MethodType MT_bootstrap644 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap644 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap644", MT_bootstrap644 ());
+    }
+
+    private static MethodHandle INDY_call644;
+    private static MethodHandle INDY_call644 () throws Throwable {
+        if (INDY_call644 != null) return INDY_call644;
+        CallSite cs = (CallSite) MH_bootstrap644 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap644 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper644 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call644 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap644 (Object l, Object n, Object t) throws Throwable { return _mh[ 644 ].invokeExact(l, n, t); }
+
+    // 645
+    private static MethodType MT_bootstrap645 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap645 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap645", MT_bootstrap645 ());
+    }
+
+    private static MethodHandle INDY_call645;
+    private static MethodHandle INDY_call645 () throws Throwable {
+        if (INDY_call645 != null) return INDY_call645;
+        CallSite cs = (CallSite) MH_bootstrap645 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap645 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper645 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call645 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap645 (Object l, Object n, Object t) throws Throwable { return _mh[ 645 ].invokeExact(l, n, t); }
+
+    // 646
+    private static MethodType MT_bootstrap646 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap646 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap646", MT_bootstrap646 ());
+    }
+
+    private static MethodHandle INDY_call646;
+    private static MethodHandle INDY_call646 () throws Throwable {
+        if (INDY_call646 != null) return INDY_call646;
+        CallSite cs = (CallSite) MH_bootstrap646 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap646 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper646 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call646 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap646 (Object l, Object n, Object t) throws Throwable { return _mh[ 646 ].invokeExact(l, n, t); }
+
+    // 647
+    private static MethodType MT_bootstrap647 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap647 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap647", MT_bootstrap647 ());
+    }
+
+    private static MethodHandle INDY_call647;
+    private static MethodHandle INDY_call647 () throws Throwable {
+        if (INDY_call647 != null) return INDY_call647;
+        CallSite cs = (CallSite) MH_bootstrap647 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap647 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper647 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call647 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap647 (Object l, Object n, Object t) throws Throwable { return _mh[ 647 ].invokeExact(l, n, t); }
+
+    // 648
+    private static MethodType MT_bootstrap648 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap648 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap648", MT_bootstrap648 ());
+    }
+
+    private static MethodHandle INDY_call648;
+    private static MethodHandle INDY_call648 () throws Throwable {
+        if (INDY_call648 != null) return INDY_call648;
+        CallSite cs = (CallSite) MH_bootstrap648 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap648 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper648 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call648 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap648 (Object l, Object n, Object t) throws Throwable { return _mh[ 648 ].invokeExact(l, n, t); }
+
+    // 649
+    private static MethodType MT_bootstrap649 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap649 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap649", MT_bootstrap649 ());
+    }
+
+    private static MethodHandle INDY_call649;
+    private static MethodHandle INDY_call649 () throws Throwable {
+        if (INDY_call649 != null) return INDY_call649;
+        CallSite cs = (CallSite) MH_bootstrap649 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap649 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper649 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call649 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap649 (Object l, Object n, Object t) throws Throwable { return _mh[ 649 ].invokeExact(l, n, t); }
+
+    // 650
+    private static MethodType MT_bootstrap650 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap650 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap650", MT_bootstrap650 ());
+    }
+
+    private static MethodHandle INDY_call650;
+    private static MethodHandle INDY_call650 () throws Throwable {
+        if (INDY_call650 != null) return INDY_call650;
+        CallSite cs = (CallSite) MH_bootstrap650 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap650 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper650 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call650 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap650 (Object l, Object n, Object t) throws Throwable { return _mh[ 650 ].invokeExact(l, n, t); }
+
+    // 651
+    private static MethodType MT_bootstrap651 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap651 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap651", MT_bootstrap651 ());
+    }
+
+    private static MethodHandle INDY_call651;
+    private static MethodHandle INDY_call651 () throws Throwable {
+        if (INDY_call651 != null) return INDY_call651;
+        CallSite cs = (CallSite) MH_bootstrap651 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap651 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper651 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call651 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap651 (Object l, Object n, Object t) throws Throwable { return _mh[ 651 ].invokeExact(l, n, t); }
+
+    // 652
+    private static MethodType MT_bootstrap652 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap652 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap652", MT_bootstrap652 ());
+    }
+
+    private static MethodHandle INDY_call652;
+    private static MethodHandle INDY_call652 () throws Throwable {
+        if (INDY_call652 != null) return INDY_call652;
+        CallSite cs = (CallSite) MH_bootstrap652 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap652 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper652 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call652 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap652 (Object l, Object n, Object t) throws Throwable { return _mh[ 652 ].invokeExact(l, n, t); }
+
+    // 653
+    private static MethodType MT_bootstrap653 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap653 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap653", MT_bootstrap653 ());
+    }
+
+    private static MethodHandle INDY_call653;
+    private static MethodHandle INDY_call653 () throws Throwable {
+        if (INDY_call653 != null) return INDY_call653;
+        CallSite cs = (CallSite) MH_bootstrap653 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap653 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper653 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call653 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap653 (Object l, Object n, Object t) throws Throwable { return _mh[ 653 ].invokeExact(l, n, t); }
+
+    // 654
+    private static MethodType MT_bootstrap654 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap654 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap654", MT_bootstrap654 ());
+    }
+
+    private static MethodHandle INDY_call654;
+    private static MethodHandle INDY_call654 () throws Throwable {
+        if (INDY_call654 != null) return INDY_call654;
+        CallSite cs = (CallSite) MH_bootstrap654 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap654 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper654 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call654 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap654 (Object l, Object n, Object t) throws Throwable { return _mh[ 654 ].invokeExact(l, n, t); }
+
+    // 655
+    private static MethodType MT_bootstrap655 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap655 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap655", MT_bootstrap655 ());
+    }
+
+    private static MethodHandle INDY_call655;
+    private static MethodHandle INDY_call655 () throws Throwable {
+        if (INDY_call655 != null) return INDY_call655;
+        CallSite cs = (CallSite) MH_bootstrap655 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap655 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper655 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call655 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap655 (Object l, Object n, Object t) throws Throwable { return _mh[ 655 ].invokeExact(l, n, t); }
+
+    // 656
+    private static MethodType MT_bootstrap656 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap656 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap656", MT_bootstrap656 ());
+    }
+
+    private static MethodHandle INDY_call656;
+    private static MethodHandle INDY_call656 () throws Throwable {
+        if (INDY_call656 != null) return INDY_call656;
+        CallSite cs = (CallSite) MH_bootstrap656 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap656 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper656 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call656 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap656 (Object l, Object n, Object t) throws Throwable { return _mh[ 656 ].invokeExact(l, n, t); }
+
+    // 657
+    private static MethodType MT_bootstrap657 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap657 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap657", MT_bootstrap657 ());
+    }
+
+    private static MethodHandle INDY_call657;
+    private static MethodHandle INDY_call657 () throws Throwable {
+        if (INDY_call657 != null) return INDY_call657;
+        CallSite cs = (CallSite) MH_bootstrap657 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap657 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper657 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call657 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap657 (Object l, Object n, Object t) throws Throwable { return _mh[ 657 ].invokeExact(l, n, t); }
+
+    // 658
+    private static MethodType MT_bootstrap658 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap658 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap658", MT_bootstrap658 ());
+    }
+
+    private static MethodHandle INDY_call658;
+    private static MethodHandle INDY_call658 () throws Throwable {
+        if (INDY_call658 != null) return INDY_call658;
+        CallSite cs = (CallSite) MH_bootstrap658 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap658 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper658 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call658 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap658 (Object l, Object n, Object t) throws Throwable { return _mh[ 658 ].invokeExact(l, n, t); }
+
+    // 659
+    private static MethodType MT_bootstrap659 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap659 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap659", MT_bootstrap659 ());
+    }
+
+    private static MethodHandle INDY_call659;
+    private static MethodHandle INDY_call659 () throws Throwable {
+        if (INDY_call659 != null) return INDY_call659;
+        CallSite cs = (CallSite) MH_bootstrap659 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap659 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper659 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call659 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap659 (Object l, Object n, Object t) throws Throwable { return _mh[ 659 ].invokeExact(l, n, t); }
+
+    // 660
+    private static MethodType MT_bootstrap660 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap660 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap660", MT_bootstrap660 ());
+    }
+
+    private static MethodHandle INDY_call660;
+    private static MethodHandle INDY_call660 () throws Throwable {
+        if (INDY_call660 != null) return INDY_call660;
+        CallSite cs = (CallSite) MH_bootstrap660 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap660 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper660 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call660 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap660 (Object l, Object n, Object t) throws Throwable { return _mh[ 660 ].invokeExact(l, n, t); }
+
+    // 661
+    private static MethodType MT_bootstrap661 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap661 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap661", MT_bootstrap661 ());
+    }
+
+    private static MethodHandle INDY_call661;
+    private static MethodHandle INDY_call661 () throws Throwable {
+        if (INDY_call661 != null) return INDY_call661;
+        CallSite cs = (CallSite) MH_bootstrap661 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap661 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper661 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call661 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap661 (Object l, Object n, Object t) throws Throwable { return _mh[ 661 ].invokeExact(l, n, t); }
+
+    // 662
+    private static MethodType MT_bootstrap662 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap662 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap662", MT_bootstrap662 ());
+    }
+
+    private static MethodHandle INDY_call662;
+    private static MethodHandle INDY_call662 () throws Throwable {
+        if (INDY_call662 != null) return INDY_call662;
+        CallSite cs = (CallSite) MH_bootstrap662 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap662 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper662 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call662 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap662 (Object l, Object n, Object t) throws Throwable { return _mh[ 662 ].invokeExact(l, n, t); }
+
+    // 663
+    private static MethodType MT_bootstrap663 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap663 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap663", MT_bootstrap663 ());
+    }
+
+    private static MethodHandle INDY_call663;
+    private static MethodHandle INDY_call663 () throws Throwable {
+        if (INDY_call663 != null) return INDY_call663;
+        CallSite cs = (CallSite) MH_bootstrap663 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap663 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper663 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call663 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap663 (Object l, Object n, Object t) throws Throwable { return _mh[ 663 ].invokeExact(l, n, t); }
+
+    // 664
+    private static MethodType MT_bootstrap664 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap664 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap664", MT_bootstrap664 ());
+    }
+
+    private static MethodHandle INDY_call664;
+    private static MethodHandle INDY_call664 () throws Throwable {
+        if (INDY_call664 != null) return INDY_call664;
+        CallSite cs = (CallSite) MH_bootstrap664 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap664 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper664 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call664 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap664 (Object l, Object n, Object t) throws Throwable { return _mh[ 664 ].invokeExact(l, n, t); }
+
+    // 665
+    private static MethodType MT_bootstrap665 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap665 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap665", MT_bootstrap665 ());
+    }
+
+    private static MethodHandle INDY_call665;
+    private static MethodHandle INDY_call665 () throws Throwable {
+        if (INDY_call665 != null) return INDY_call665;
+        CallSite cs = (CallSite) MH_bootstrap665 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap665 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper665 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call665 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap665 (Object l, Object n, Object t) throws Throwable { return _mh[ 665 ].invokeExact(l, n, t); }
+
+    // 666
+    private static MethodType MT_bootstrap666 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap666 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap666", MT_bootstrap666 ());
+    }
+
+    private static MethodHandle INDY_call666;
+    private static MethodHandle INDY_call666 () throws Throwable {
+        if (INDY_call666 != null) return INDY_call666;
+        CallSite cs = (CallSite) MH_bootstrap666 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap666 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper666 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call666 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap666 (Object l, Object n, Object t) throws Throwable { return _mh[ 666 ].invokeExact(l, n, t); }
+
+    // 667
+    private static MethodType MT_bootstrap667 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap667 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap667", MT_bootstrap667 ());
+    }
+
+    private static MethodHandle INDY_call667;
+    private static MethodHandle INDY_call667 () throws Throwable {
+        if (INDY_call667 != null) return INDY_call667;
+        CallSite cs = (CallSite) MH_bootstrap667 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap667 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper667 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call667 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap667 (Object l, Object n, Object t) throws Throwable { return _mh[ 667 ].invokeExact(l, n, t); }
+
+    // 668
+    private static MethodType MT_bootstrap668 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap668 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap668", MT_bootstrap668 ());
+    }
+
+    private static MethodHandle INDY_call668;
+    private static MethodHandle INDY_call668 () throws Throwable {
+        if (INDY_call668 != null) return INDY_call668;
+        CallSite cs = (CallSite) MH_bootstrap668 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap668 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper668 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call668 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap668 (Object l, Object n, Object t) throws Throwable { return _mh[ 668 ].invokeExact(l, n, t); }
+
+    // 669
+    private static MethodType MT_bootstrap669 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap669 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap669", MT_bootstrap669 ());
+    }
+
+    private static MethodHandle INDY_call669;
+    private static MethodHandle INDY_call669 () throws Throwable {
+        if (INDY_call669 != null) return INDY_call669;
+        CallSite cs = (CallSite) MH_bootstrap669 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap669 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper669 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call669 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap669 (Object l, Object n, Object t) throws Throwable { return _mh[ 669 ].invokeExact(l, n, t); }
+
+    // 670
+    private static MethodType MT_bootstrap670 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap670 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap670", MT_bootstrap670 ());
+    }
+
+    private static MethodHandle INDY_call670;
+    private static MethodHandle INDY_call670 () throws Throwable {
+        if (INDY_call670 != null) return INDY_call670;
+        CallSite cs = (CallSite) MH_bootstrap670 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap670 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper670 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call670 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap670 (Object l, Object n, Object t) throws Throwable { return _mh[ 670 ].invokeExact(l, n, t); }
+
+    // 671
+    private static MethodType MT_bootstrap671 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap671 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap671", MT_bootstrap671 ());
+    }
+
+    private static MethodHandle INDY_call671;
+    private static MethodHandle INDY_call671 () throws Throwable {
+        if (INDY_call671 != null) return INDY_call671;
+        CallSite cs = (CallSite) MH_bootstrap671 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap671 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper671 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call671 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap671 (Object l, Object n, Object t) throws Throwable { return _mh[ 671 ].invokeExact(l, n, t); }
+
+    // 672
+    private static MethodType MT_bootstrap672 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap672 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap672", MT_bootstrap672 ());
+    }
+
+    private static MethodHandle INDY_call672;
+    private static MethodHandle INDY_call672 () throws Throwable {
+        if (INDY_call672 != null) return INDY_call672;
+        CallSite cs = (CallSite) MH_bootstrap672 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap672 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper672 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call672 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap672 (Object l, Object n, Object t) throws Throwable { return _mh[ 672 ].invokeExact(l, n, t); }
+
+    // 673
+    private static MethodType MT_bootstrap673 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap673 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap673", MT_bootstrap673 ());
+    }
+
+    private static MethodHandle INDY_call673;
+    private static MethodHandle INDY_call673 () throws Throwable {
+        if (INDY_call673 != null) return INDY_call673;
+        CallSite cs = (CallSite) MH_bootstrap673 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap673 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper673 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call673 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap673 (Object l, Object n, Object t) throws Throwable { return _mh[ 673 ].invokeExact(l, n, t); }
+
+    // 674
+    private static MethodType MT_bootstrap674 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap674 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap674", MT_bootstrap674 ());
+    }
+
+    private static MethodHandle INDY_call674;
+    private static MethodHandle INDY_call674 () throws Throwable {
+        if (INDY_call674 != null) return INDY_call674;
+        CallSite cs = (CallSite) MH_bootstrap674 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap674 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper674 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call674 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap674 (Object l, Object n, Object t) throws Throwable { return _mh[ 674 ].invokeExact(l, n, t); }
+
+    // 675
+    private static MethodType MT_bootstrap675 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap675 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap675", MT_bootstrap675 ());
+    }
+
+    private static MethodHandle INDY_call675;
+    private static MethodHandle INDY_call675 () throws Throwable {
+        if (INDY_call675 != null) return INDY_call675;
+        CallSite cs = (CallSite) MH_bootstrap675 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap675 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper675 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call675 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap675 (Object l, Object n, Object t) throws Throwable { return _mh[ 675 ].invokeExact(l, n, t); }
+
+    // 676
+    private static MethodType MT_bootstrap676 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap676 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap676", MT_bootstrap676 ());
+    }
+
+    private static MethodHandle INDY_call676;
+    private static MethodHandle INDY_call676 () throws Throwable {
+        if (INDY_call676 != null) return INDY_call676;
+        CallSite cs = (CallSite) MH_bootstrap676 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap676 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper676 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call676 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap676 (Object l, Object n, Object t) throws Throwable { return _mh[ 676 ].invokeExact(l, n, t); }
+
+    // 677
+    private static MethodType MT_bootstrap677 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap677 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap677", MT_bootstrap677 ());
+    }
+
+    private static MethodHandle INDY_call677;
+    private static MethodHandle INDY_call677 () throws Throwable {
+        if (INDY_call677 != null) return INDY_call677;
+        CallSite cs = (CallSite) MH_bootstrap677 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap677 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper677 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call677 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap677 (Object l, Object n, Object t) throws Throwable { return _mh[ 677 ].invokeExact(l, n, t); }
+
+    // 678
+    private static MethodType MT_bootstrap678 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap678 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap678", MT_bootstrap678 ());
+    }
+
+    private static MethodHandle INDY_call678;
+    private static MethodHandle INDY_call678 () throws Throwable {
+        if (INDY_call678 != null) return INDY_call678;
+        CallSite cs = (CallSite) MH_bootstrap678 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap678 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper678 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call678 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap678 (Object l, Object n, Object t) throws Throwable { return _mh[ 678 ].invokeExact(l, n, t); }
+
+    // 679
+    private static MethodType MT_bootstrap679 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap679 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap679", MT_bootstrap679 ());
+    }
+
+    private static MethodHandle INDY_call679;
+    private static MethodHandle INDY_call679 () throws Throwable {
+        if (INDY_call679 != null) return INDY_call679;
+        CallSite cs = (CallSite) MH_bootstrap679 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap679 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper679 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call679 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap679 (Object l, Object n, Object t) throws Throwable { return _mh[ 679 ].invokeExact(l, n, t); }
+
+    // 680
+    private static MethodType MT_bootstrap680 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap680 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap680", MT_bootstrap680 ());
+    }
+
+    private static MethodHandle INDY_call680;
+    private static MethodHandle INDY_call680 () throws Throwable {
+        if (INDY_call680 != null) return INDY_call680;
+        CallSite cs = (CallSite) MH_bootstrap680 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap680 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper680 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call680 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap680 (Object l, Object n, Object t) throws Throwable { return _mh[ 680 ].invokeExact(l, n, t); }
+
+    // 681
+    private static MethodType MT_bootstrap681 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap681 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap681", MT_bootstrap681 ());
+    }
+
+    private static MethodHandle INDY_call681;
+    private static MethodHandle INDY_call681 () throws Throwable {
+        if (INDY_call681 != null) return INDY_call681;
+        CallSite cs = (CallSite) MH_bootstrap681 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap681 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper681 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call681 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap681 (Object l, Object n, Object t) throws Throwable { return _mh[ 681 ].invokeExact(l, n, t); }
+
+    // 682
+    private static MethodType MT_bootstrap682 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap682 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap682", MT_bootstrap682 ());
+    }
+
+    private static MethodHandle INDY_call682;
+    private static MethodHandle INDY_call682 () throws Throwable {
+        if (INDY_call682 != null) return INDY_call682;
+        CallSite cs = (CallSite) MH_bootstrap682 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap682 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper682 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call682 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap682 (Object l, Object n, Object t) throws Throwable { return _mh[ 682 ].invokeExact(l, n, t); }
+
+    // 683
+    private static MethodType MT_bootstrap683 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap683 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap683", MT_bootstrap683 ());
+    }
+
+    private static MethodHandle INDY_call683;
+    private static MethodHandle INDY_call683 () throws Throwable {
+        if (INDY_call683 != null) return INDY_call683;
+        CallSite cs = (CallSite) MH_bootstrap683 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap683 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper683 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call683 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap683 (Object l, Object n, Object t) throws Throwable { return _mh[ 683 ].invokeExact(l, n, t); }
+
+    // 684
+    private static MethodType MT_bootstrap684 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap684 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap684", MT_bootstrap684 ());
+    }
+
+    private static MethodHandle INDY_call684;
+    private static MethodHandle INDY_call684 () throws Throwable {
+        if (INDY_call684 != null) return INDY_call684;
+        CallSite cs = (CallSite) MH_bootstrap684 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap684 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper684 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call684 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap684 (Object l, Object n, Object t) throws Throwable { return _mh[ 684 ].invokeExact(l, n, t); }
+
+    // 685
+    private static MethodType MT_bootstrap685 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap685 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap685", MT_bootstrap685 ());
+    }
+
+    private static MethodHandle INDY_call685;
+    private static MethodHandle INDY_call685 () throws Throwable {
+        if (INDY_call685 != null) return INDY_call685;
+        CallSite cs = (CallSite) MH_bootstrap685 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap685 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper685 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call685 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap685 (Object l, Object n, Object t) throws Throwable { return _mh[ 685 ].invokeExact(l, n, t); }
+
+    // 686
+    private static MethodType MT_bootstrap686 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap686 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap686", MT_bootstrap686 ());
+    }
+
+    private static MethodHandle INDY_call686;
+    private static MethodHandle INDY_call686 () throws Throwable {
+        if (INDY_call686 != null) return INDY_call686;
+        CallSite cs = (CallSite) MH_bootstrap686 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap686 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper686 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call686 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap686 (Object l, Object n, Object t) throws Throwable { return _mh[ 686 ].invokeExact(l, n, t); }
+
+    // 687
+    private static MethodType MT_bootstrap687 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap687 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap687", MT_bootstrap687 ());
+    }
+
+    private static MethodHandle INDY_call687;
+    private static MethodHandle INDY_call687 () throws Throwable {
+        if (INDY_call687 != null) return INDY_call687;
+        CallSite cs = (CallSite) MH_bootstrap687 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap687 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper687 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call687 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap687 (Object l, Object n, Object t) throws Throwable { return _mh[ 687 ].invokeExact(l, n, t); }
+
+    // 688
+    private static MethodType MT_bootstrap688 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap688 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap688", MT_bootstrap688 ());
+    }
+
+    private static MethodHandle INDY_call688;
+    private static MethodHandle INDY_call688 () throws Throwable {
+        if (INDY_call688 != null) return INDY_call688;
+        CallSite cs = (CallSite) MH_bootstrap688 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap688 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper688 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call688 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap688 (Object l, Object n, Object t) throws Throwable { return _mh[ 688 ].invokeExact(l, n, t); }
+
+    // 689
+    private static MethodType MT_bootstrap689 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap689 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap689", MT_bootstrap689 ());
+    }
+
+    private static MethodHandle INDY_call689;
+    private static MethodHandle INDY_call689 () throws Throwable {
+        if (INDY_call689 != null) return INDY_call689;
+        CallSite cs = (CallSite) MH_bootstrap689 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap689 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper689 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call689 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap689 (Object l, Object n, Object t) throws Throwable { return _mh[ 689 ].invokeExact(l, n, t); }
+
+    // 690
+    private static MethodType MT_bootstrap690 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap690 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap690", MT_bootstrap690 ());
+    }
+
+    private static MethodHandle INDY_call690;
+    private static MethodHandle INDY_call690 () throws Throwable {
+        if (INDY_call690 != null) return INDY_call690;
+        CallSite cs = (CallSite) MH_bootstrap690 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap690 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper690 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call690 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap690 (Object l, Object n, Object t) throws Throwable { return _mh[ 690 ].invokeExact(l, n, t); }
+
+    // 691
+    private static MethodType MT_bootstrap691 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap691 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap691", MT_bootstrap691 ());
+    }
+
+    private static MethodHandle INDY_call691;
+    private static MethodHandle INDY_call691 () throws Throwable {
+        if (INDY_call691 != null) return INDY_call691;
+        CallSite cs = (CallSite) MH_bootstrap691 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap691 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper691 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call691 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap691 (Object l, Object n, Object t) throws Throwable { return _mh[ 691 ].invokeExact(l, n, t); }
+
+    // 692
+    private static MethodType MT_bootstrap692 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap692 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap692", MT_bootstrap692 ());
+    }
+
+    private static MethodHandle INDY_call692;
+    private static MethodHandle INDY_call692 () throws Throwable {
+        if (INDY_call692 != null) return INDY_call692;
+        CallSite cs = (CallSite) MH_bootstrap692 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap692 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper692 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call692 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap692 (Object l, Object n, Object t) throws Throwable { return _mh[ 692 ].invokeExact(l, n, t); }
+
+    // 693
+    private static MethodType MT_bootstrap693 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap693 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap693", MT_bootstrap693 ());
+    }
+
+    private static MethodHandle INDY_call693;
+    private static MethodHandle INDY_call693 () throws Throwable {
+        if (INDY_call693 != null) return INDY_call693;
+        CallSite cs = (CallSite) MH_bootstrap693 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap693 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper693 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call693 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap693 (Object l, Object n, Object t) throws Throwable { return _mh[ 693 ].invokeExact(l, n, t); }
+
+    // 694
+    private static MethodType MT_bootstrap694 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap694 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap694", MT_bootstrap694 ());
+    }
+
+    private static MethodHandle INDY_call694;
+    private static MethodHandle INDY_call694 () throws Throwable {
+        if (INDY_call694 != null) return INDY_call694;
+        CallSite cs = (CallSite) MH_bootstrap694 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap694 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper694 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call694 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap694 (Object l, Object n, Object t) throws Throwable { return _mh[ 694 ].invokeExact(l, n, t); }
+
+    // 695
+    private static MethodType MT_bootstrap695 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap695 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap695", MT_bootstrap695 ());
+    }
+
+    private static MethodHandle INDY_call695;
+    private static MethodHandle INDY_call695 () throws Throwable {
+        if (INDY_call695 != null) return INDY_call695;
+        CallSite cs = (CallSite) MH_bootstrap695 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap695 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper695 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call695 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap695 (Object l, Object n, Object t) throws Throwable { return _mh[ 695 ].invokeExact(l, n, t); }
+
+    // 696
+    private static MethodType MT_bootstrap696 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap696 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap696", MT_bootstrap696 ());
+    }
+
+    private static MethodHandle INDY_call696;
+    private static MethodHandle INDY_call696 () throws Throwable {
+        if (INDY_call696 != null) return INDY_call696;
+        CallSite cs = (CallSite) MH_bootstrap696 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap696 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper696 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call696 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap696 (Object l, Object n, Object t) throws Throwable { return _mh[ 696 ].invokeExact(l, n, t); }
+
+    // 697
+    private static MethodType MT_bootstrap697 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap697 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap697", MT_bootstrap697 ());
+    }
+
+    private static MethodHandle INDY_call697;
+    private static MethodHandle INDY_call697 () throws Throwable {
+        if (INDY_call697 != null) return INDY_call697;
+        CallSite cs = (CallSite) MH_bootstrap697 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap697 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper697 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call697 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap697 (Object l, Object n, Object t) throws Throwable { return _mh[ 697 ].invokeExact(l, n, t); }
+
+    // 698
+    private static MethodType MT_bootstrap698 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap698 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap698", MT_bootstrap698 ());
+    }
+
+    private static MethodHandle INDY_call698;
+    private static MethodHandle INDY_call698 () throws Throwable {
+        if (INDY_call698 != null) return INDY_call698;
+        CallSite cs = (CallSite) MH_bootstrap698 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap698 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper698 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call698 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap698 (Object l, Object n, Object t) throws Throwable { return _mh[ 698 ].invokeExact(l, n, t); }
+
+    // 699
+    private static MethodType MT_bootstrap699 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap699 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap699", MT_bootstrap699 ());
+    }
+
+    private static MethodHandle INDY_call699;
+    private static MethodHandle INDY_call699 () throws Throwable {
+        if (INDY_call699 != null) return INDY_call699;
+        CallSite cs = (CallSite) MH_bootstrap699 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap699 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper699 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call699 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap699 (Object l, Object n, Object t) throws Throwable { return _mh[ 699 ].invokeExact(l, n, t); }
+
+    // 700
+    private static MethodType MT_bootstrap700 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap700 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap700", MT_bootstrap700 ());
+    }
+
+    private static MethodHandle INDY_call700;
+    private static MethodHandle INDY_call700 () throws Throwable {
+        if (INDY_call700 != null) return INDY_call700;
+        CallSite cs = (CallSite) MH_bootstrap700 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap700 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper700 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call700 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap700 (Object l, Object n, Object t) throws Throwable { return _mh[ 700 ].invokeExact(l, n, t); }
+
+    // 701
+    private static MethodType MT_bootstrap701 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap701 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap701", MT_bootstrap701 ());
+    }
+
+    private static MethodHandle INDY_call701;
+    private static MethodHandle INDY_call701 () throws Throwable {
+        if (INDY_call701 != null) return INDY_call701;
+        CallSite cs = (CallSite) MH_bootstrap701 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap701 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper701 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call701 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap701 (Object l, Object n, Object t) throws Throwable { return _mh[ 701 ].invokeExact(l, n, t); }
+
+    // 702
+    private static MethodType MT_bootstrap702 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap702 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap702", MT_bootstrap702 ());
+    }
+
+    private static MethodHandle INDY_call702;
+    private static MethodHandle INDY_call702 () throws Throwable {
+        if (INDY_call702 != null) return INDY_call702;
+        CallSite cs = (CallSite) MH_bootstrap702 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap702 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper702 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call702 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap702 (Object l, Object n, Object t) throws Throwable { return _mh[ 702 ].invokeExact(l, n, t); }
+
+    // 703
+    private static MethodType MT_bootstrap703 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap703 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap703", MT_bootstrap703 ());
+    }
+
+    private static MethodHandle INDY_call703;
+    private static MethodHandle INDY_call703 () throws Throwable {
+        if (INDY_call703 != null) return INDY_call703;
+        CallSite cs = (CallSite) MH_bootstrap703 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap703 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper703 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call703 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap703 (Object l, Object n, Object t) throws Throwable { return _mh[ 703 ].invokeExact(l, n, t); }
+
+    // 704
+    private static MethodType MT_bootstrap704 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap704 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap704", MT_bootstrap704 ());
+    }
+
+    private static MethodHandle INDY_call704;
+    private static MethodHandle INDY_call704 () throws Throwable {
+        if (INDY_call704 != null) return INDY_call704;
+        CallSite cs = (CallSite) MH_bootstrap704 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap704 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper704 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call704 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap704 (Object l, Object n, Object t) throws Throwable { return _mh[ 704 ].invokeExact(l, n, t); }
+
+    // 705
+    private static MethodType MT_bootstrap705 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap705 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap705", MT_bootstrap705 ());
+    }
+
+    private static MethodHandle INDY_call705;
+    private static MethodHandle INDY_call705 () throws Throwable {
+        if (INDY_call705 != null) return INDY_call705;
+        CallSite cs = (CallSite) MH_bootstrap705 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap705 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper705 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call705 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap705 (Object l, Object n, Object t) throws Throwable { return _mh[ 705 ].invokeExact(l, n, t); }
+
+    // 706
+    private static MethodType MT_bootstrap706 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap706 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap706", MT_bootstrap706 ());
+    }
+
+    private static MethodHandle INDY_call706;
+    private static MethodHandle INDY_call706 () throws Throwable {
+        if (INDY_call706 != null) return INDY_call706;
+        CallSite cs = (CallSite) MH_bootstrap706 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap706 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper706 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call706 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap706 (Object l, Object n, Object t) throws Throwable { return _mh[ 706 ].invokeExact(l, n, t); }
+
+    // 707
+    private static MethodType MT_bootstrap707 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap707 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap707", MT_bootstrap707 ());
+    }
+
+    private static MethodHandle INDY_call707;
+    private static MethodHandle INDY_call707 () throws Throwable {
+        if (INDY_call707 != null) return INDY_call707;
+        CallSite cs = (CallSite) MH_bootstrap707 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap707 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper707 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call707 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap707 (Object l, Object n, Object t) throws Throwable { return _mh[ 707 ].invokeExact(l, n, t); }
+
+    // 708
+    private static MethodType MT_bootstrap708 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap708 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap708", MT_bootstrap708 ());
+    }
+
+    private static MethodHandle INDY_call708;
+    private static MethodHandle INDY_call708 () throws Throwable {
+        if (INDY_call708 != null) return INDY_call708;
+        CallSite cs = (CallSite) MH_bootstrap708 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap708 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper708 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call708 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap708 (Object l, Object n, Object t) throws Throwable { return _mh[ 708 ].invokeExact(l, n, t); }
+
+    // 709
+    private static MethodType MT_bootstrap709 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap709 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap709", MT_bootstrap709 ());
+    }
+
+    private static MethodHandle INDY_call709;
+    private static MethodHandle INDY_call709 () throws Throwable {
+        if (INDY_call709 != null) return INDY_call709;
+        CallSite cs = (CallSite) MH_bootstrap709 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap709 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper709 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call709 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap709 (Object l, Object n, Object t) throws Throwable { return _mh[ 709 ].invokeExact(l, n, t); }
+
+    // 710
+    private static MethodType MT_bootstrap710 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap710 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap710", MT_bootstrap710 ());
+    }
+
+    private static MethodHandle INDY_call710;
+    private static MethodHandle INDY_call710 () throws Throwable {
+        if (INDY_call710 != null) return INDY_call710;
+        CallSite cs = (CallSite) MH_bootstrap710 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap710 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper710 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call710 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap710 (Object l, Object n, Object t) throws Throwable { return _mh[ 710 ].invokeExact(l, n, t); }
+
+    // 711
+    private static MethodType MT_bootstrap711 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap711 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap711", MT_bootstrap711 ());
+    }
+
+    private static MethodHandle INDY_call711;
+    private static MethodHandle INDY_call711 () throws Throwable {
+        if (INDY_call711 != null) return INDY_call711;
+        CallSite cs = (CallSite) MH_bootstrap711 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap711 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper711 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call711 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap711 (Object l, Object n, Object t) throws Throwable { return _mh[ 711 ].invokeExact(l, n, t); }
+
+    // 712
+    private static MethodType MT_bootstrap712 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap712 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap712", MT_bootstrap712 ());
+    }
+
+    private static MethodHandle INDY_call712;
+    private static MethodHandle INDY_call712 () throws Throwable {
+        if (INDY_call712 != null) return INDY_call712;
+        CallSite cs = (CallSite) MH_bootstrap712 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap712 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper712 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call712 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap712 (Object l, Object n, Object t) throws Throwable { return _mh[ 712 ].invokeExact(l, n, t); }
+
+    // 713
+    private static MethodType MT_bootstrap713 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap713 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap713", MT_bootstrap713 ());
+    }
+
+    private static MethodHandle INDY_call713;
+    private static MethodHandle INDY_call713 () throws Throwable {
+        if (INDY_call713 != null) return INDY_call713;
+        CallSite cs = (CallSite) MH_bootstrap713 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap713 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper713 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call713 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap713 (Object l, Object n, Object t) throws Throwable { return _mh[ 713 ].invokeExact(l, n, t); }
+
+    // 714
+    private static MethodType MT_bootstrap714 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap714 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap714", MT_bootstrap714 ());
+    }
+
+    private static MethodHandle INDY_call714;
+    private static MethodHandle INDY_call714 () throws Throwable {
+        if (INDY_call714 != null) return INDY_call714;
+        CallSite cs = (CallSite) MH_bootstrap714 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap714 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper714 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call714 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap714 (Object l, Object n, Object t) throws Throwable { return _mh[ 714 ].invokeExact(l, n, t); }
+
+    // 715
+    private static MethodType MT_bootstrap715 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap715 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap715", MT_bootstrap715 ());
+    }
+
+    private static MethodHandle INDY_call715;
+    private static MethodHandle INDY_call715 () throws Throwable {
+        if (INDY_call715 != null) return INDY_call715;
+        CallSite cs = (CallSite) MH_bootstrap715 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap715 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper715 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call715 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap715 (Object l, Object n, Object t) throws Throwable { return _mh[ 715 ].invokeExact(l, n, t); }
+
+    // 716
+    private static MethodType MT_bootstrap716 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap716 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap716", MT_bootstrap716 ());
+    }
+
+    private static MethodHandle INDY_call716;
+    private static MethodHandle INDY_call716 () throws Throwable {
+        if (INDY_call716 != null) return INDY_call716;
+        CallSite cs = (CallSite) MH_bootstrap716 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap716 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper716 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call716 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap716 (Object l, Object n, Object t) throws Throwable { return _mh[ 716 ].invokeExact(l, n, t); }
+
+    // 717
+    private static MethodType MT_bootstrap717 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap717 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap717", MT_bootstrap717 ());
+    }
+
+    private static MethodHandle INDY_call717;
+    private static MethodHandle INDY_call717 () throws Throwable {
+        if (INDY_call717 != null) return INDY_call717;
+        CallSite cs = (CallSite) MH_bootstrap717 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap717 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper717 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call717 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap717 (Object l, Object n, Object t) throws Throwable { return _mh[ 717 ].invokeExact(l, n, t); }
+
+    // 718
+    private static MethodType MT_bootstrap718 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap718 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap718", MT_bootstrap718 ());
+    }
+
+    private static MethodHandle INDY_call718;
+    private static MethodHandle INDY_call718 () throws Throwable {
+        if (INDY_call718 != null) return INDY_call718;
+        CallSite cs = (CallSite) MH_bootstrap718 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap718 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper718 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call718 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap718 (Object l, Object n, Object t) throws Throwable { return _mh[ 718 ].invokeExact(l, n, t); }
+
+    // 719
+    private static MethodType MT_bootstrap719 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap719 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap719", MT_bootstrap719 ());
+    }
+
+    private static MethodHandle INDY_call719;
+    private static MethodHandle INDY_call719 () throws Throwable {
+        if (INDY_call719 != null) return INDY_call719;
+        CallSite cs = (CallSite) MH_bootstrap719 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap719 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper719 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call719 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap719 (Object l, Object n, Object t) throws Throwable { return _mh[ 719 ].invokeExact(l, n, t); }
+
+    // 720
+    private static MethodType MT_bootstrap720 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap720 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap720", MT_bootstrap720 ());
+    }
+
+    private static MethodHandle INDY_call720;
+    private static MethodHandle INDY_call720 () throws Throwable {
+        if (INDY_call720 != null) return INDY_call720;
+        CallSite cs = (CallSite) MH_bootstrap720 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap720 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper720 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call720 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap720 (Object l, Object n, Object t) throws Throwable { return _mh[ 720 ].invokeExact(l, n, t); }
+
+    // 721
+    private static MethodType MT_bootstrap721 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap721 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap721", MT_bootstrap721 ());
+    }
+
+    private static MethodHandle INDY_call721;
+    private static MethodHandle INDY_call721 () throws Throwable {
+        if (INDY_call721 != null) return INDY_call721;
+        CallSite cs = (CallSite) MH_bootstrap721 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap721 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper721 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call721 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap721 (Object l, Object n, Object t) throws Throwable { return _mh[ 721 ].invokeExact(l, n, t); }
+
+    // 722
+    private static MethodType MT_bootstrap722 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap722 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap722", MT_bootstrap722 ());
+    }
+
+    private static MethodHandle INDY_call722;
+    private static MethodHandle INDY_call722 () throws Throwable {
+        if (INDY_call722 != null) return INDY_call722;
+        CallSite cs = (CallSite) MH_bootstrap722 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap722 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper722 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call722 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap722 (Object l, Object n, Object t) throws Throwable { return _mh[ 722 ].invokeExact(l, n, t); }
+
+    // 723
+    private static MethodType MT_bootstrap723 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap723 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap723", MT_bootstrap723 ());
+    }
+
+    private static MethodHandle INDY_call723;
+    private static MethodHandle INDY_call723 () throws Throwable {
+        if (INDY_call723 != null) return INDY_call723;
+        CallSite cs = (CallSite) MH_bootstrap723 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap723 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper723 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call723 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap723 (Object l, Object n, Object t) throws Throwable { return _mh[ 723 ].invokeExact(l, n, t); }
+
+    // 724
+    private static MethodType MT_bootstrap724 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap724 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap724", MT_bootstrap724 ());
+    }
+
+    private static MethodHandle INDY_call724;
+    private static MethodHandle INDY_call724 () throws Throwable {
+        if (INDY_call724 != null) return INDY_call724;
+        CallSite cs = (CallSite) MH_bootstrap724 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap724 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper724 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call724 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap724 (Object l, Object n, Object t) throws Throwable { return _mh[ 724 ].invokeExact(l, n, t); }
+
+    // 725
+    private static MethodType MT_bootstrap725 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap725 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap725", MT_bootstrap725 ());
+    }
+
+    private static MethodHandle INDY_call725;
+    private static MethodHandle INDY_call725 () throws Throwable {
+        if (INDY_call725 != null) return INDY_call725;
+        CallSite cs = (CallSite) MH_bootstrap725 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap725 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper725 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call725 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap725 (Object l, Object n, Object t) throws Throwable { return _mh[ 725 ].invokeExact(l, n, t); }
+
+    // 726
+    private static MethodType MT_bootstrap726 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap726 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap726", MT_bootstrap726 ());
+    }
+
+    private static MethodHandle INDY_call726;
+    private static MethodHandle INDY_call726 () throws Throwable {
+        if (INDY_call726 != null) return INDY_call726;
+        CallSite cs = (CallSite) MH_bootstrap726 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap726 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper726 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call726 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap726 (Object l, Object n, Object t) throws Throwable { return _mh[ 726 ].invokeExact(l, n, t); }
+
+    // 727
+    private static MethodType MT_bootstrap727 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap727 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap727", MT_bootstrap727 ());
+    }
+
+    private static MethodHandle INDY_call727;
+    private static MethodHandle INDY_call727 () throws Throwable {
+        if (INDY_call727 != null) return INDY_call727;
+        CallSite cs = (CallSite) MH_bootstrap727 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap727 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper727 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call727 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap727 (Object l, Object n, Object t) throws Throwable { return _mh[ 727 ].invokeExact(l, n, t); }
+
+    // 728
+    private static MethodType MT_bootstrap728 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap728 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap728", MT_bootstrap728 ());
+    }
+
+    private static MethodHandle INDY_call728;
+    private static MethodHandle INDY_call728 () throws Throwable {
+        if (INDY_call728 != null) return INDY_call728;
+        CallSite cs = (CallSite) MH_bootstrap728 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap728 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper728 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call728 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap728 (Object l, Object n, Object t) throws Throwable { return _mh[ 728 ].invokeExact(l, n, t); }
+
+    // 729
+    private static MethodType MT_bootstrap729 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap729 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap729", MT_bootstrap729 ());
+    }
+
+    private static MethodHandle INDY_call729;
+    private static MethodHandle INDY_call729 () throws Throwable {
+        if (INDY_call729 != null) return INDY_call729;
+        CallSite cs = (CallSite) MH_bootstrap729 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap729 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper729 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call729 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap729 (Object l, Object n, Object t) throws Throwable { return _mh[ 729 ].invokeExact(l, n, t); }
+
+    // 730
+    private static MethodType MT_bootstrap730 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap730 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap730", MT_bootstrap730 ());
+    }
+
+    private static MethodHandle INDY_call730;
+    private static MethodHandle INDY_call730 () throws Throwable {
+        if (INDY_call730 != null) return INDY_call730;
+        CallSite cs = (CallSite) MH_bootstrap730 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap730 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper730 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call730 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap730 (Object l, Object n, Object t) throws Throwable { return _mh[ 730 ].invokeExact(l, n, t); }
+
+    // 731
+    private static MethodType MT_bootstrap731 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap731 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap731", MT_bootstrap731 ());
+    }
+
+    private static MethodHandle INDY_call731;
+    private static MethodHandle INDY_call731 () throws Throwable {
+        if (INDY_call731 != null) return INDY_call731;
+        CallSite cs = (CallSite) MH_bootstrap731 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap731 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper731 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call731 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap731 (Object l, Object n, Object t) throws Throwable { return _mh[ 731 ].invokeExact(l, n, t); }
+
+    // 732
+    private static MethodType MT_bootstrap732 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap732 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap732", MT_bootstrap732 ());
+    }
+
+    private static MethodHandle INDY_call732;
+    private static MethodHandle INDY_call732 () throws Throwable {
+        if (INDY_call732 != null) return INDY_call732;
+        CallSite cs = (CallSite) MH_bootstrap732 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap732 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper732 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call732 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap732 (Object l, Object n, Object t) throws Throwable { return _mh[ 732 ].invokeExact(l, n, t); }
+
+    // 733
+    private static MethodType MT_bootstrap733 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap733 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap733", MT_bootstrap733 ());
+    }
+
+    private static MethodHandle INDY_call733;
+    private static MethodHandle INDY_call733 () throws Throwable {
+        if (INDY_call733 != null) return INDY_call733;
+        CallSite cs = (CallSite) MH_bootstrap733 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap733 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper733 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call733 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap733 (Object l, Object n, Object t) throws Throwable { return _mh[ 733 ].invokeExact(l, n, t); }
+
+    // 734
+    private static MethodType MT_bootstrap734 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap734 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap734", MT_bootstrap734 ());
+    }
+
+    private static MethodHandle INDY_call734;
+    private static MethodHandle INDY_call734 () throws Throwable {
+        if (INDY_call734 != null) return INDY_call734;
+        CallSite cs = (CallSite) MH_bootstrap734 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap734 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper734 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call734 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap734 (Object l, Object n, Object t) throws Throwable { return _mh[ 734 ].invokeExact(l, n, t); }
+
+    // 735
+    private static MethodType MT_bootstrap735 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap735 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap735", MT_bootstrap735 ());
+    }
+
+    private static MethodHandle INDY_call735;
+    private static MethodHandle INDY_call735 () throws Throwable {
+        if (INDY_call735 != null) return INDY_call735;
+        CallSite cs = (CallSite) MH_bootstrap735 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap735 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper735 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call735 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap735 (Object l, Object n, Object t) throws Throwable { return _mh[ 735 ].invokeExact(l, n, t); }
+
+    // 736
+    private static MethodType MT_bootstrap736 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap736 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap736", MT_bootstrap736 ());
+    }
+
+    private static MethodHandle INDY_call736;
+    private static MethodHandle INDY_call736 () throws Throwable {
+        if (INDY_call736 != null) return INDY_call736;
+        CallSite cs = (CallSite) MH_bootstrap736 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap736 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper736 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call736 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap736 (Object l, Object n, Object t) throws Throwable { return _mh[ 736 ].invokeExact(l, n, t); }
+
+    // 737
+    private static MethodType MT_bootstrap737 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap737 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap737", MT_bootstrap737 ());
+    }
+
+    private static MethodHandle INDY_call737;
+    private static MethodHandle INDY_call737 () throws Throwable {
+        if (INDY_call737 != null) return INDY_call737;
+        CallSite cs = (CallSite) MH_bootstrap737 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap737 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper737 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call737 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap737 (Object l, Object n, Object t) throws Throwable { return _mh[ 737 ].invokeExact(l, n, t); }
+
+    // 738
+    private static MethodType MT_bootstrap738 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap738 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap738", MT_bootstrap738 ());
+    }
+
+    private static MethodHandle INDY_call738;
+    private static MethodHandle INDY_call738 () throws Throwable {
+        if (INDY_call738 != null) return INDY_call738;
+        CallSite cs = (CallSite) MH_bootstrap738 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap738 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper738 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call738 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap738 (Object l, Object n, Object t) throws Throwable { return _mh[ 738 ].invokeExact(l, n, t); }
+
+    // 739
+    private static MethodType MT_bootstrap739 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap739 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap739", MT_bootstrap739 ());
+    }
+
+    private static MethodHandle INDY_call739;
+    private static MethodHandle INDY_call739 () throws Throwable {
+        if (INDY_call739 != null) return INDY_call739;
+        CallSite cs = (CallSite) MH_bootstrap739 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap739 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper739 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call739 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap739 (Object l, Object n, Object t) throws Throwable { return _mh[ 739 ].invokeExact(l, n, t); }
+
+    // 740
+    private static MethodType MT_bootstrap740 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap740 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap740", MT_bootstrap740 ());
+    }
+
+    private static MethodHandle INDY_call740;
+    private static MethodHandle INDY_call740 () throws Throwable {
+        if (INDY_call740 != null) return INDY_call740;
+        CallSite cs = (CallSite) MH_bootstrap740 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap740 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper740 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call740 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap740 (Object l, Object n, Object t) throws Throwable { return _mh[ 740 ].invokeExact(l, n, t); }
+
+    // 741
+    private static MethodType MT_bootstrap741 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap741 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap741", MT_bootstrap741 ());
+    }
+
+    private static MethodHandle INDY_call741;
+    private static MethodHandle INDY_call741 () throws Throwable {
+        if (INDY_call741 != null) return INDY_call741;
+        CallSite cs = (CallSite) MH_bootstrap741 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap741 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper741 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call741 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap741 (Object l, Object n, Object t) throws Throwable { return _mh[ 741 ].invokeExact(l, n, t); }
+
+    // 742
+    private static MethodType MT_bootstrap742 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap742 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap742", MT_bootstrap742 ());
+    }
+
+    private static MethodHandle INDY_call742;
+    private static MethodHandle INDY_call742 () throws Throwable {
+        if (INDY_call742 != null) return INDY_call742;
+        CallSite cs = (CallSite) MH_bootstrap742 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap742 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper742 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call742 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap742 (Object l, Object n, Object t) throws Throwable { return _mh[ 742 ].invokeExact(l, n, t); }
+
+    // 743
+    private static MethodType MT_bootstrap743 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap743 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap743", MT_bootstrap743 ());
+    }
+
+    private static MethodHandle INDY_call743;
+    private static MethodHandle INDY_call743 () throws Throwable {
+        if (INDY_call743 != null) return INDY_call743;
+        CallSite cs = (CallSite) MH_bootstrap743 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap743 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper743 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call743 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap743 (Object l, Object n, Object t) throws Throwable { return _mh[ 743 ].invokeExact(l, n, t); }
+
+    // 744
+    private static MethodType MT_bootstrap744 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap744 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap744", MT_bootstrap744 ());
+    }
+
+    private static MethodHandle INDY_call744;
+    private static MethodHandle INDY_call744 () throws Throwable {
+        if (INDY_call744 != null) return INDY_call744;
+        CallSite cs = (CallSite) MH_bootstrap744 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap744 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper744 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call744 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap744 (Object l, Object n, Object t) throws Throwable { return _mh[ 744 ].invokeExact(l, n, t); }
+
+    // 745
+    private static MethodType MT_bootstrap745 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap745 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap745", MT_bootstrap745 ());
+    }
+
+    private static MethodHandle INDY_call745;
+    private static MethodHandle INDY_call745 () throws Throwable {
+        if (INDY_call745 != null) return INDY_call745;
+        CallSite cs = (CallSite) MH_bootstrap745 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap745 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper745 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call745 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap745 (Object l, Object n, Object t) throws Throwable { return _mh[ 745 ].invokeExact(l, n, t); }
+
+    // 746
+    private static MethodType MT_bootstrap746 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap746 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap746", MT_bootstrap746 ());
+    }
+
+    private static MethodHandle INDY_call746;
+    private static MethodHandle INDY_call746 () throws Throwable {
+        if (INDY_call746 != null) return INDY_call746;
+        CallSite cs = (CallSite) MH_bootstrap746 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap746 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper746 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call746 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap746 (Object l, Object n, Object t) throws Throwable { return _mh[ 746 ].invokeExact(l, n, t); }
+
+    // 747
+    private static MethodType MT_bootstrap747 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap747 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap747", MT_bootstrap747 ());
+    }
+
+    private static MethodHandle INDY_call747;
+    private static MethodHandle INDY_call747 () throws Throwable {
+        if (INDY_call747 != null) return INDY_call747;
+        CallSite cs = (CallSite) MH_bootstrap747 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap747 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper747 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call747 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap747 (Object l, Object n, Object t) throws Throwable { return _mh[ 747 ].invokeExact(l, n, t); }
+
+    // 748
+    private static MethodType MT_bootstrap748 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap748 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap748", MT_bootstrap748 ());
+    }
+
+    private static MethodHandle INDY_call748;
+    private static MethodHandle INDY_call748 () throws Throwable {
+        if (INDY_call748 != null) return INDY_call748;
+        CallSite cs = (CallSite) MH_bootstrap748 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap748 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper748 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call748 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap748 (Object l, Object n, Object t) throws Throwable { return _mh[ 748 ].invokeExact(l, n, t); }
+
+    // 749
+    private static MethodType MT_bootstrap749 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap749 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap749", MT_bootstrap749 ());
+    }
+
+    private static MethodHandle INDY_call749;
+    private static MethodHandle INDY_call749 () throws Throwable {
+        if (INDY_call749 != null) return INDY_call749;
+        CallSite cs = (CallSite) MH_bootstrap749 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap749 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper749 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call749 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap749 (Object l, Object n, Object t) throws Throwable { return _mh[ 749 ].invokeExact(l, n, t); }
+
+    // 750
+    private static MethodType MT_bootstrap750 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap750 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap750", MT_bootstrap750 ());
+    }
+
+    private static MethodHandle INDY_call750;
+    private static MethodHandle INDY_call750 () throws Throwable {
+        if (INDY_call750 != null) return INDY_call750;
+        CallSite cs = (CallSite) MH_bootstrap750 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap750 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper750 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call750 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap750 (Object l, Object n, Object t) throws Throwable { return _mh[ 750 ].invokeExact(l, n, t); }
+
+    // 751
+    private static MethodType MT_bootstrap751 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap751 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap751", MT_bootstrap751 ());
+    }
+
+    private static MethodHandle INDY_call751;
+    private static MethodHandle INDY_call751 () throws Throwable {
+        if (INDY_call751 != null) return INDY_call751;
+        CallSite cs = (CallSite) MH_bootstrap751 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap751 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper751 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call751 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap751 (Object l, Object n, Object t) throws Throwable { return _mh[ 751 ].invokeExact(l, n, t); }
+
+    // 752
+    private static MethodType MT_bootstrap752 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap752 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap752", MT_bootstrap752 ());
+    }
+
+    private static MethodHandle INDY_call752;
+    private static MethodHandle INDY_call752 () throws Throwable {
+        if (INDY_call752 != null) return INDY_call752;
+        CallSite cs = (CallSite) MH_bootstrap752 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap752 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper752 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call752 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap752 (Object l, Object n, Object t) throws Throwable { return _mh[ 752 ].invokeExact(l, n, t); }
+
+    // 753
+    private static MethodType MT_bootstrap753 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap753 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap753", MT_bootstrap753 ());
+    }
+
+    private static MethodHandle INDY_call753;
+    private static MethodHandle INDY_call753 () throws Throwable {
+        if (INDY_call753 != null) return INDY_call753;
+        CallSite cs = (CallSite) MH_bootstrap753 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap753 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper753 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call753 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap753 (Object l, Object n, Object t) throws Throwable { return _mh[ 753 ].invokeExact(l, n, t); }
+
+    // 754
+    private static MethodType MT_bootstrap754 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap754 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap754", MT_bootstrap754 ());
+    }
+
+    private static MethodHandle INDY_call754;
+    private static MethodHandle INDY_call754 () throws Throwable {
+        if (INDY_call754 != null) return INDY_call754;
+        CallSite cs = (CallSite) MH_bootstrap754 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap754 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper754 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call754 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap754 (Object l, Object n, Object t) throws Throwable { return _mh[ 754 ].invokeExact(l, n, t); }
+
+    // 755
+    private static MethodType MT_bootstrap755 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap755 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap755", MT_bootstrap755 ());
+    }
+
+    private static MethodHandle INDY_call755;
+    private static MethodHandle INDY_call755 () throws Throwable {
+        if (INDY_call755 != null) return INDY_call755;
+        CallSite cs = (CallSite) MH_bootstrap755 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap755 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper755 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call755 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap755 (Object l, Object n, Object t) throws Throwable { return _mh[ 755 ].invokeExact(l, n, t); }
+
+    // 756
+    private static MethodType MT_bootstrap756 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap756 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap756", MT_bootstrap756 ());
+    }
+
+    private static MethodHandle INDY_call756;
+    private static MethodHandle INDY_call756 () throws Throwable {
+        if (INDY_call756 != null) return INDY_call756;
+        CallSite cs = (CallSite) MH_bootstrap756 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap756 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper756 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call756 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap756 (Object l, Object n, Object t) throws Throwable { return _mh[ 756 ].invokeExact(l, n, t); }
+
+    // 757
+    private static MethodType MT_bootstrap757 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap757 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap757", MT_bootstrap757 ());
+    }
+
+    private static MethodHandle INDY_call757;
+    private static MethodHandle INDY_call757 () throws Throwable {
+        if (INDY_call757 != null) return INDY_call757;
+        CallSite cs = (CallSite) MH_bootstrap757 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap757 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper757 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call757 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap757 (Object l, Object n, Object t) throws Throwable { return _mh[ 757 ].invokeExact(l, n, t); }
+
+    // 758
+    private static MethodType MT_bootstrap758 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap758 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap758", MT_bootstrap758 ());
+    }
+
+    private static MethodHandle INDY_call758;
+    private static MethodHandle INDY_call758 () throws Throwable {
+        if (INDY_call758 != null) return INDY_call758;
+        CallSite cs = (CallSite) MH_bootstrap758 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap758 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper758 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call758 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap758 (Object l, Object n, Object t) throws Throwable { return _mh[ 758 ].invokeExact(l, n, t); }
+
+    // 759
+    private static MethodType MT_bootstrap759 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap759 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap759", MT_bootstrap759 ());
+    }
+
+    private static MethodHandle INDY_call759;
+    private static MethodHandle INDY_call759 () throws Throwable {
+        if (INDY_call759 != null) return INDY_call759;
+        CallSite cs = (CallSite) MH_bootstrap759 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap759 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper759 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call759 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap759 (Object l, Object n, Object t) throws Throwable { return _mh[ 759 ].invokeExact(l, n, t); }
+
+    // 760
+    private static MethodType MT_bootstrap760 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap760 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap760", MT_bootstrap760 ());
+    }
+
+    private static MethodHandle INDY_call760;
+    private static MethodHandle INDY_call760 () throws Throwable {
+        if (INDY_call760 != null) return INDY_call760;
+        CallSite cs = (CallSite) MH_bootstrap760 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap760 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper760 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call760 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap760 (Object l, Object n, Object t) throws Throwable { return _mh[ 760 ].invokeExact(l, n, t); }
+
+    // 761
+    private static MethodType MT_bootstrap761 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap761 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap761", MT_bootstrap761 ());
+    }
+
+    private static MethodHandle INDY_call761;
+    private static MethodHandle INDY_call761 () throws Throwable {
+        if (INDY_call761 != null) return INDY_call761;
+        CallSite cs = (CallSite) MH_bootstrap761 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap761 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper761 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call761 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap761 (Object l, Object n, Object t) throws Throwable { return _mh[ 761 ].invokeExact(l, n, t); }
+
+    // 762
+    private static MethodType MT_bootstrap762 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap762 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap762", MT_bootstrap762 ());
+    }
+
+    private static MethodHandle INDY_call762;
+    private static MethodHandle INDY_call762 () throws Throwable {
+        if (INDY_call762 != null) return INDY_call762;
+        CallSite cs = (CallSite) MH_bootstrap762 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap762 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper762 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call762 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap762 (Object l, Object n, Object t) throws Throwable { return _mh[ 762 ].invokeExact(l, n, t); }
+
+    // 763
+    private static MethodType MT_bootstrap763 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap763 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap763", MT_bootstrap763 ());
+    }
+
+    private static MethodHandle INDY_call763;
+    private static MethodHandle INDY_call763 () throws Throwable {
+        if (INDY_call763 != null) return INDY_call763;
+        CallSite cs = (CallSite) MH_bootstrap763 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap763 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper763 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call763 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap763 (Object l, Object n, Object t) throws Throwable { return _mh[ 763 ].invokeExact(l, n, t); }
+
+    // 764
+    private static MethodType MT_bootstrap764 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap764 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap764", MT_bootstrap764 ());
+    }
+
+    private static MethodHandle INDY_call764;
+    private static MethodHandle INDY_call764 () throws Throwable {
+        if (INDY_call764 != null) return INDY_call764;
+        CallSite cs = (CallSite) MH_bootstrap764 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap764 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper764 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call764 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap764 (Object l, Object n, Object t) throws Throwable { return _mh[ 764 ].invokeExact(l, n, t); }
+
+    // 765
+    private static MethodType MT_bootstrap765 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap765 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap765", MT_bootstrap765 ());
+    }
+
+    private static MethodHandle INDY_call765;
+    private static MethodHandle INDY_call765 () throws Throwable {
+        if (INDY_call765 != null) return INDY_call765;
+        CallSite cs = (CallSite) MH_bootstrap765 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap765 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper765 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call765 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap765 (Object l, Object n, Object t) throws Throwable { return _mh[ 765 ].invokeExact(l, n, t); }
+
+    // 766
+    private static MethodType MT_bootstrap766 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap766 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap766", MT_bootstrap766 ());
+    }
+
+    private static MethodHandle INDY_call766;
+    private static MethodHandle INDY_call766 () throws Throwable {
+        if (INDY_call766 != null) return INDY_call766;
+        CallSite cs = (CallSite) MH_bootstrap766 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap766 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper766 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call766 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap766 (Object l, Object n, Object t) throws Throwable { return _mh[ 766 ].invokeExact(l, n, t); }
+
+    // 767
+    private static MethodType MT_bootstrap767 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap767 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap767", MT_bootstrap767 ());
+    }
+
+    private static MethodHandle INDY_call767;
+    private static MethodHandle INDY_call767 () throws Throwable {
+        if (INDY_call767 != null) return INDY_call767;
+        CallSite cs = (CallSite) MH_bootstrap767 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap767 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper767 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call767 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap767 (Object l, Object n, Object t) throws Throwable { return _mh[ 767 ].invokeExact(l, n, t); }
+
+    // 768
+    private static MethodType MT_bootstrap768 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap768 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap768", MT_bootstrap768 ());
+    }
+
+    private static MethodHandle INDY_call768;
+    private static MethodHandle INDY_call768 () throws Throwable {
+        if (INDY_call768 != null) return INDY_call768;
+        CallSite cs = (CallSite) MH_bootstrap768 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap768 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper768 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call768 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap768 (Object l, Object n, Object t) throws Throwable { return _mh[ 768 ].invokeExact(l, n, t); }
+
+    // 769
+    private static MethodType MT_bootstrap769 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap769 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap769", MT_bootstrap769 ());
+    }
+
+    private static MethodHandle INDY_call769;
+    private static MethodHandle INDY_call769 () throws Throwable {
+        if (INDY_call769 != null) return INDY_call769;
+        CallSite cs = (CallSite) MH_bootstrap769 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap769 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper769 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call769 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap769 (Object l, Object n, Object t) throws Throwable { return _mh[ 769 ].invokeExact(l, n, t); }
+
+    // 770
+    private static MethodType MT_bootstrap770 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap770 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap770", MT_bootstrap770 ());
+    }
+
+    private static MethodHandle INDY_call770;
+    private static MethodHandle INDY_call770 () throws Throwable {
+        if (INDY_call770 != null) return INDY_call770;
+        CallSite cs = (CallSite) MH_bootstrap770 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap770 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper770 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call770 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap770 (Object l, Object n, Object t) throws Throwable { return _mh[ 770 ].invokeExact(l, n, t); }
+
+    // 771
+    private static MethodType MT_bootstrap771 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap771 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap771", MT_bootstrap771 ());
+    }
+
+    private static MethodHandle INDY_call771;
+    private static MethodHandle INDY_call771 () throws Throwable {
+        if (INDY_call771 != null) return INDY_call771;
+        CallSite cs = (CallSite) MH_bootstrap771 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap771 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper771 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call771 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap771 (Object l, Object n, Object t) throws Throwable { return _mh[ 771 ].invokeExact(l, n, t); }
+
+    // 772
+    private static MethodType MT_bootstrap772 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap772 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap772", MT_bootstrap772 ());
+    }
+
+    private static MethodHandle INDY_call772;
+    private static MethodHandle INDY_call772 () throws Throwable {
+        if (INDY_call772 != null) return INDY_call772;
+        CallSite cs = (CallSite) MH_bootstrap772 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap772 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper772 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call772 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap772 (Object l, Object n, Object t) throws Throwable { return _mh[ 772 ].invokeExact(l, n, t); }
+
+    // 773
+    private static MethodType MT_bootstrap773 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap773 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap773", MT_bootstrap773 ());
+    }
+
+    private static MethodHandle INDY_call773;
+    private static MethodHandle INDY_call773 () throws Throwable {
+        if (INDY_call773 != null) return INDY_call773;
+        CallSite cs = (CallSite) MH_bootstrap773 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap773 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper773 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call773 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap773 (Object l, Object n, Object t) throws Throwable { return _mh[ 773 ].invokeExact(l, n, t); }
+
+    // 774
+    private static MethodType MT_bootstrap774 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap774 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap774", MT_bootstrap774 ());
+    }
+
+    private static MethodHandle INDY_call774;
+    private static MethodHandle INDY_call774 () throws Throwable {
+        if (INDY_call774 != null) return INDY_call774;
+        CallSite cs = (CallSite) MH_bootstrap774 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap774 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper774 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call774 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap774 (Object l, Object n, Object t) throws Throwable { return _mh[ 774 ].invokeExact(l, n, t); }
+
+    // 775
+    private static MethodType MT_bootstrap775 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap775 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap775", MT_bootstrap775 ());
+    }
+
+    private static MethodHandle INDY_call775;
+    private static MethodHandle INDY_call775 () throws Throwable {
+        if (INDY_call775 != null) return INDY_call775;
+        CallSite cs = (CallSite) MH_bootstrap775 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap775 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper775 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call775 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap775 (Object l, Object n, Object t) throws Throwable { return _mh[ 775 ].invokeExact(l, n, t); }
+
+    // 776
+    private static MethodType MT_bootstrap776 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap776 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap776", MT_bootstrap776 ());
+    }
+
+    private static MethodHandle INDY_call776;
+    private static MethodHandle INDY_call776 () throws Throwable {
+        if (INDY_call776 != null) return INDY_call776;
+        CallSite cs = (CallSite) MH_bootstrap776 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap776 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper776 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call776 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap776 (Object l, Object n, Object t) throws Throwable { return _mh[ 776 ].invokeExact(l, n, t); }
+
+    // 777
+    private static MethodType MT_bootstrap777 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap777 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap777", MT_bootstrap777 ());
+    }
+
+    private static MethodHandle INDY_call777;
+    private static MethodHandle INDY_call777 () throws Throwable {
+        if (INDY_call777 != null) return INDY_call777;
+        CallSite cs = (CallSite) MH_bootstrap777 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap777 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper777 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call777 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap777 (Object l, Object n, Object t) throws Throwable { return _mh[ 777 ].invokeExact(l, n, t); }
+
+    // 778
+    private static MethodType MT_bootstrap778 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap778 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap778", MT_bootstrap778 ());
+    }
+
+    private static MethodHandle INDY_call778;
+    private static MethodHandle INDY_call778 () throws Throwable {
+        if (INDY_call778 != null) return INDY_call778;
+        CallSite cs = (CallSite) MH_bootstrap778 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap778 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper778 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call778 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap778 (Object l, Object n, Object t) throws Throwable { return _mh[ 778 ].invokeExact(l, n, t); }
+
+    // 779
+    private static MethodType MT_bootstrap779 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap779 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap779", MT_bootstrap779 ());
+    }
+
+    private static MethodHandle INDY_call779;
+    private static MethodHandle INDY_call779 () throws Throwable {
+        if (INDY_call779 != null) return INDY_call779;
+        CallSite cs = (CallSite) MH_bootstrap779 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap779 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper779 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call779 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap779 (Object l, Object n, Object t) throws Throwable { return _mh[ 779 ].invokeExact(l, n, t); }
+
+    // 780
+    private static MethodType MT_bootstrap780 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap780 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap780", MT_bootstrap780 ());
+    }
+
+    private static MethodHandle INDY_call780;
+    private static MethodHandle INDY_call780 () throws Throwable {
+        if (INDY_call780 != null) return INDY_call780;
+        CallSite cs = (CallSite) MH_bootstrap780 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap780 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper780 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call780 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap780 (Object l, Object n, Object t) throws Throwable { return _mh[ 780 ].invokeExact(l, n, t); }
+
+    // 781
+    private static MethodType MT_bootstrap781 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap781 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap781", MT_bootstrap781 ());
+    }
+
+    private static MethodHandle INDY_call781;
+    private static MethodHandle INDY_call781 () throws Throwable {
+        if (INDY_call781 != null) return INDY_call781;
+        CallSite cs = (CallSite) MH_bootstrap781 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap781 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper781 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call781 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap781 (Object l, Object n, Object t) throws Throwable { return _mh[ 781 ].invokeExact(l, n, t); }
+
+    // 782
+    private static MethodType MT_bootstrap782 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap782 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap782", MT_bootstrap782 ());
+    }
+
+    private static MethodHandle INDY_call782;
+    private static MethodHandle INDY_call782 () throws Throwable {
+        if (INDY_call782 != null) return INDY_call782;
+        CallSite cs = (CallSite) MH_bootstrap782 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap782 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper782 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call782 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap782 (Object l, Object n, Object t) throws Throwable { return _mh[ 782 ].invokeExact(l, n, t); }
+
+    // 783
+    private static MethodType MT_bootstrap783 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap783 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap783", MT_bootstrap783 ());
+    }
+
+    private static MethodHandle INDY_call783;
+    private static MethodHandle INDY_call783 () throws Throwable {
+        if (INDY_call783 != null) return INDY_call783;
+        CallSite cs = (CallSite) MH_bootstrap783 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap783 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper783 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call783 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap783 (Object l, Object n, Object t) throws Throwable { return _mh[ 783 ].invokeExact(l, n, t); }
+
+    // 784
+    private static MethodType MT_bootstrap784 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap784 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap784", MT_bootstrap784 ());
+    }
+
+    private static MethodHandle INDY_call784;
+    private static MethodHandle INDY_call784 () throws Throwable {
+        if (INDY_call784 != null) return INDY_call784;
+        CallSite cs = (CallSite) MH_bootstrap784 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap784 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper784 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call784 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap784 (Object l, Object n, Object t) throws Throwable { return _mh[ 784 ].invokeExact(l, n, t); }
+
+    // 785
+    private static MethodType MT_bootstrap785 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap785 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap785", MT_bootstrap785 ());
+    }
+
+    private static MethodHandle INDY_call785;
+    private static MethodHandle INDY_call785 () throws Throwable {
+        if (INDY_call785 != null) return INDY_call785;
+        CallSite cs = (CallSite) MH_bootstrap785 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap785 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper785 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call785 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap785 (Object l, Object n, Object t) throws Throwable { return _mh[ 785 ].invokeExact(l, n, t); }
+
+    // 786
+    private static MethodType MT_bootstrap786 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap786 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap786", MT_bootstrap786 ());
+    }
+
+    private static MethodHandle INDY_call786;
+    private static MethodHandle INDY_call786 () throws Throwable {
+        if (INDY_call786 != null) return INDY_call786;
+        CallSite cs = (CallSite) MH_bootstrap786 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap786 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper786 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call786 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap786 (Object l, Object n, Object t) throws Throwable { return _mh[ 786 ].invokeExact(l, n, t); }
+
+    // 787
+    private static MethodType MT_bootstrap787 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap787 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap787", MT_bootstrap787 ());
+    }
+
+    private static MethodHandle INDY_call787;
+    private static MethodHandle INDY_call787 () throws Throwable {
+        if (INDY_call787 != null) return INDY_call787;
+        CallSite cs = (CallSite) MH_bootstrap787 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap787 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper787 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call787 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap787 (Object l, Object n, Object t) throws Throwable { return _mh[ 787 ].invokeExact(l, n, t); }
+
+    // 788
+    private static MethodType MT_bootstrap788 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap788 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap788", MT_bootstrap788 ());
+    }
+
+    private static MethodHandle INDY_call788;
+    private static MethodHandle INDY_call788 () throws Throwable {
+        if (INDY_call788 != null) return INDY_call788;
+        CallSite cs = (CallSite) MH_bootstrap788 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap788 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper788 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call788 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap788 (Object l, Object n, Object t) throws Throwable { return _mh[ 788 ].invokeExact(l, n, t); }
+
+    // 789
+    private static MethodType MT_bootstrap789 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap789 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap789", MT_bootstrap789 ());
+    }
+
+    private static MethodHandle INDY_call789;
+    private static MethodHandle INDY_call789 () throws Throwable {
+        if (INDY_call789 != null) return INDY_call789;
+        CallSite cs = (CallSite) MH_bootstrap789 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap789 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper789 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call789 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap789 (Object l, Object n, Object t) throws Throwable { return _mh[ 789 ].invokeExact(l, n, t); }
+
+    // 790
+    private static MethodType MT_bootstrap790 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap790 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap790", MT_bootstrap790 ());
+    }
+
+    private static MethodHandle INDY_call790;
+    private static MethodHandle INDY_call790 () throws Throwable {
+        if (INDY_call790 != null) return INDY_call790;
+        CallSite cs = (CallSite) MH_bootstrap790 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap790 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper790 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call790 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap790 (Object l, Object n, Object t) throws Throwable { return _mh[ 790 ].invokeExact(l, n, t); }
+
+    // 791
+    private static MethodType MT_bootstrap791 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap791 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap791", MT_bootstrap791 ());
+    }
+
+    private static MethodHandle INDY_call791;
+    private static MethodHandle INDY_call791 () throws Throwable {
+        if (INDY_call791 != null) return INDY_call791;
+        CallSite cs = (CallSite) MH_bootstrap791 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap791 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper791 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call791 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap791 (Object l, Object n, Object t) throws Throwable { return _mh[ 791 ].invokeExact(l, n, t); }
+
+    // 792
+    private static MethodType MT_bootstrap792 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap792 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap792", MT_bootstrap792 ());
+    }
+
+    private static MethodHandle INDY_call792;
+    private static MethodHandle INDY_call792 () throws Throwable {
+        if (INDY_call792 != null) return INDY_call792;
+        CallSite cs = (CallSite) MH_bootstrap792 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap792 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper792 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call792 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap792 (Object l, Object n, Object t) throws Throwable { return _mh[ 792 ].invokeExact(l, n, t); }
+
+    // 793
+    private static MethodType MT_bootstrap793 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap793 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap793", MT_bootstrap793 ());
+    }
+
+    private static MethodHandle INDY_call793;
+    private static MethodHandle INDY_call793 () throws Throwable {
+        if (INDY_call793 != null) return INDY_call793;
+        CallSite cs = (CallSite) MH_bootstrap793 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap793 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper793 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call793 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap793 (Object l, Object n, Object t) throws Throwable { return _mh[ 793 ].invokeExact(l, n, t); }
+
+    // 794
+    private static MethodType MT_bootstrap794 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap794 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap794", MT_bootstrap794 ());
+    }
+
+    private static MethodHandle INDY_call794;
+    private static MethodHandle INDY_call794 () throws Throwable {
+        if (INDY_call794 != null) return INDY_call794;
+        CallSite cs = (CallSite) MH_bootstrap794 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap794 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper794 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call794 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap794 (Object l, Object n, Object t) throws Throwable { return _mh[ 794 ].invokeExact(l, n, t); }
+
+    // 795
+    private static MethodType MT_bootstrap795 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap795 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap795", MT_bootstrap795 ());
+    }
+
+    private static MethodHandle INDY_call795;
+    private static MethodHandle INDY_call795 () throws Throwable {
+        if (INDY_call795 != null) return INDY_call795;
+        CallSite cs = (CallSite) MH_bootstrap795 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap795 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper795 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call795 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap795 (Object l, Object n, Object t) throws Throwable { return _mh[ 795 ].invokeExact(l, n, t); }
+
+    // 796
+    private static MethodType MT_bootstrap796 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap796 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap796", MT_bootstrap796 ());
+    }
+
+    private static MethodHandle INDY_call796;
+    private static MethodHandle INDY_call796 () throws Throwable {
+        if (INDY_call796 != null) return INDY_call796;
+        CallSite cs = (CallSite) MH_bootstrap796 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap796 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper796 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call796 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap796 (Object l, Object n, Object t) throws Throwable { return _mh[ 796 ].invokeExact(l, n, t); }
+
+    // 797
+    private static MethodType MT_bootstrap797 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap797 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap797", MT_bootstrap797 ());
+    }
+
+    private static MethodHandle INDY_call797;
+    private static MethodHandle INDY_call797 () throws Throwable {
+        if (INDY_call797 != null) return INDY_call797;
+        CallSite cs = (CallSite) MH_bootstrap797 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap797 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper797 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call797 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap797 (Object l, Object n, Object t) throws Throwable { return _mh[ 797 ].invokeExact(l, n, t); }
+
+    // 798
+    private static MethodType MT_bootstrap798 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap798 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap798", MT_bootstrap798 ());
+    }
+
+    private static MethodHandle INDY_call798;
+    private static MethodHandle INDY_call798 () throws Throwable {
+        if (INDY_call798 != null) return INDY_call798;
+        CallSite cs = (CallSite) MH_bootstrap798 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap798 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper798 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call798 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap798 (Object l, Object n, Object t) throws Throwable { return _mh[ 798 ].invokeExact(l, n, t); }
+
+    // 799
+    private static MethodType MT_bootstrap799 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap799 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap799", MT_bootstrap799 ());
+    }
+
+    private static MethodHandle INDY_call799;
+    private static MethodHandle INDY_call799 () throws Throwable {
+        if (INDY_call799 != null) return INDY_call799;
+        CallSite cs = (CallSite) MH_bootstrap799 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap799 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper799 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call799 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap799 (Object l, Object n, Object t) throws Throwable { return _mh[ 799 ].invokeExact(l, n, t); }
+
+    // 800
+    private static MethodType MT_bootstrap800 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap800 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap800", MT_bootstrap800 ());
+    }
+
+    private static MethodHandle INDY_call800;
+    private static MethodHandle INDY_call800 () throws Throwable {
+        if (INDY_call800 != null) return INDY_call800;
+        CallSite cs = (CallSite) MH_bootstrap800 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap800 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper800 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call800 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap800 (Object l, Object n, Object t) throws Throwable { return _mh[ 800 ].invokeExact(l, n, t); }
+
+    // 801
+    private static MethodType MT_bootstrap801 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap801 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap801", MT_bootstrap801 ());
+    }
+
+    private static MethodHandle INDY_call801;
+    private static MethodHandle INDY_call801 () throws Throwable {
+        if (INDY_call801 != null) return INDY_call801;
+        CallSite cs = (CallSite) MH_bootstrap801 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap801 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper801 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call801 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap801 (Object l, Object n, Object t) throws Throwable { return _mh[ 801 ].invokeExact(l, n, t); }
+
+    // 802
+    private static MethodType MT_bootstrap802 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap802 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap802", MT_bootstrap802 ());
+    }
+
+    private static MethodHandle INDY_call802;
+    private static MethodHandle INDY_call802 () throws Throwable {
+        if (INDY_call802 != null) return INDY_call802;
+        CallSite cs = (CallSite) MH_bootstrap802 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap802 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper802 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call802 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap802 (Object l, Object n, Object t) throws Throwable { return _mh[ 802 ].invokeExact(l, n, t); }
+
+    // 803
+    private static MethodType MT_bootstrap803 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap803 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap803", MT_bootstrap803 ());
+    }
+
+    private static MethodHandle INDY_call803;
+    private static MethodHandle INDY_call803 () throws Throwable {
+        if (INDY_call803 != null) return INDY_call803;
+        CallSite cs = (CallSite) MH_bootstrap803 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap803 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper803 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call803 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap803 (Object l, Object n, Object t) throws Throwable { return _mh[ 803 ].invokeExact(l, n, t); }
+
+    // 804
+    private static MethodType MT_bootstrap804 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap804 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap804", MT_bootstrap804 ());
+    }
+
+    private static MethodHandle INDY_call804;
+    private static MethodHandle INDY_call804 () throws Throwable {
+        if (INDY_call804 != null) return INDY_call804;
+        CallSite cs = (CallSite) MH_bootstrap804 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap804 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper804 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call804 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap804 (Object l, Object n, Object t) throws Throwable { return _mh[ 804 ].invokeExact(l, n, t); }
+
+    // 805
+    private static MethodType MT_bootstrap805 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap805 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap805", MT_bootstrap805 ());
+    }
+
+    private static MethodHandle INDY_call805;
+    private static MethodHandle INDY_call805 () throws Throwable {
+        if (INDY_call805 != null) return INDY_call805;
+        CallSite cs = (CallSite) MH_bootstrap805 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap805 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper805 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call805 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap805 (Object l, Object n, Object t) throws Throwable { return _mh[ 805 ].invokeExact(l, n, t); }
+
+    // 806
+    private static MethodType MT_bootstrap806 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap806 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap806", MT_bootstrap806 ());
+    }
+
+    private static MethodHandle INDY_call806;
+    private static MethodHandle INDY_call806 () throws Throwable {
+        if (INDY_call806 != null) return INDY_call806;
+        CallSite cs = (CallSite) MH_bootstrap806 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap806 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper806 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call806 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap806 (Object l, Object n, Object t) throws Throwable { return _mh[ 806 ].invokeExact(l, n, t); }
+
+    // 807
+    private static MethodType MT_bootstrap807 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap807 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap807", MT_bootstrap807 ());
+    }
+
+    private static MethodHandle INDY_call807;
+    private static MethodHandle INDY_call807 () throws Throwable {
+        if (INDY_call807 != null) return INDY_call807;
+        CallSite cs = (CallSite) MH_bootstrap807 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap807 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper807 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call807 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap807 (Object l, Object n, Object t) throws Throwable { return _mh[ 807 ].invokeExact(l, n, t); }
+
+    // 808
+    private static MethodType MT_bootstrap808 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap808 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap808", MT_bootstrap808 ());
+    }
+
+    private static MethodHandle INDY_call808;
+    private static MethodHandle INDY_call808 () throws Throwable {
+        if (INDY_call808 != null) return INDY_call808;
+        CallSite cs = (CallSite) MH_bootstrap808 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap808 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper808 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call808 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap808 (Object l, Object n, Object t) throws Throwable { return _mh[ 808 ].invokeExact(l, n, t); }
+
+    // 809
+    private static MethodType MT_bootstrap809 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap809 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap809", MT_bootstrap809 ());
+    }
+
+    private static MethodHandle INDY_call809;
+    private static MethodHandle INDY_call809 () throws Throwable {
+        if (INDY_call809 != null) return INDY_call809;
+        CallSite cs = (CallSite) MH_bootstrap809 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap809 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper809 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call809 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap809 (Object l, Object n, Object t) throws Throwable { return _mh[ 809 ].invokeExact(l, n, t); }
+
+    // 810
+    private static MethodType MT_bootstrap810 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap810 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap810", MT_bootstrap810 ());
+    }
+
+    private static MethodHandle INDY_call810;
+    private static MethodHandle INDY_call810 () throws Throwable {
+        if (INDY_call810 != null) return INDY_call810;
+        CallSite cs = (CallSite) MH_bootstrap810 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap810 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper810 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call810 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap810 (Object l, Object n, Object t) throws Throwable { return _mh[ 810 ].invokeExact(l, n, t); }
+
+    // 811
+    private static MethodType MT_bootstrap811 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap811 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap811", MT_bootstrap811 ());
+    }
+
+    private static MethodHandle INDY_call811;
+    private static MethodHandle INDY_call811 () throws Throwable {
+        if (INDY_call811 != null) return INDY_call811;
+        CallSite cs = (CallSite) MH_bootstrap811 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap811 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper811 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call811 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap811 (Object l, Object n, Object t) throws Throwable { return _mh[ 811 ].invokeExact(l, n, t); }
+
+    // 812
+    private static MethodType MT_bootstrap812 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap812 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap812", MT_bootstrap812 ());
+    }
+
+    private static MethodHandle INDY_call812;
+    private static MethodHandle INDY_call812 () throws Throwable {
+        if (INDY_call812 != null) return INDY_call812;
+        CallSite cs = (CallSite) MH_bootstrap812 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap812 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper812 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call812 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap812 (Object l, Object n, Object t) throws Throwable { return _mh[ 812 ].invokeExact(l, n, t); }
+
+    // 813
+    private static MethodType MT_bootstrap813 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap813 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap813", MT_bootstrap813 ());
+    }
+
+    private static MethodHandle INDY_call813;
+    private static MethodHandle INDY_call813 () throws Throwable {
+        if (INDY_call813 != null) return INDY_call813;
+        CallSite cs = (CallSite) MH_bootstrap813 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap813 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper813 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call813 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap813 (Object l, Object n, Object t) throws Throwable { return _mh[ 813 ].invokeExact(l, n, t); }
+
+    // 814
+    private static MethodType MT_bootstrap814 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap814 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap814", MT_bootstrap814 ());
+    }
+
+    private static MethodHandle INDY_call814;
+    private static MethodHandle INDY_call814 () throws Throwable {
+        if (INDY_call814 != null) return INDY_call814;
+        CallSite cs = (CallSite) MH_bootstrap814 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap814 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper814 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call814 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap814 (Object l, Object n, Object t) throws Throwable { return _mh[ 814 ].invokeExact(l, n, t); }
+
+    // 815
+    private static MethodType MT_bootstrap815 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap815 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap815", MT_bootstrap815 ());
+    }
+
+    private static MethodHandle INDY_call815;
+    private static MethodHandle INDY_call815 () throws Throwable {
+        if (INDY_call815 != null) return INDY_call815;
+        CallSite cs = (CallSite) MH_bootstrap815 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap815 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper815 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call815 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap815 (Object l, Object n, Object t) throws Throwable { return _mh[ 815 ].invokeExact(l, n, t); }
+
+    // 816
+    private static MethodType MT_bootstrap816 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap816 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap816", MT_bootstrap816 ());
+    }
+
+    private static MethodHandle INDY_call816;
+    private static MethodHandle INDY_call816 () throws Throwable {
+        if (INDY_call816 != null) return INDY_call816;
+        CallSite cs = (CallSite) MH_bootstrap816 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap816 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper816 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call816 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap816 (Object l, Object n, Object t) throws Throwable { return _mh[ 816 ].invokeExact(l, n, t); }
+
+    // 817
+    private static MethodType MT_bootstrap817 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap817 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap817", MT_bootstrap817 ());
+    }
+
+    private static MethodHandle INDY_call817;
+    private static MethodHandle INDY_call817 () throws Throwable {
+        if (INDY_call817 != null) return INDY_call817;
+        CallSite cs = (CallSite) MH_bootstrap817 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap817 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper817 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call817 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap817 (Object l, Object n, Object t) throws Throwable { return _mh[ 817 ].invokeExact(l, n, t); }
+
+    // 818
+    private static MethodType MT_bootstrap818 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap818 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap818", MT_bootstrap818 ());
+    }
+
+    private static MethodHandle INDY_call818;
+    private static MethodHandle INDY_call818 () throws Throwable {
+        if (INDY_call818 != null) return INDY_call818;
+        CallSite cs = (CallSite) MH_bootstrap818 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap818 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper818 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call818 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap818 (Object l, Object n, Object t) throws Throwable { return _mh[ 818 ].invokeExact(l, n, t); }
+
+    // 819
+    private static MethodType MT_bootstrap819 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap819 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap819", MT_bootstrap819 ());
+    }
+
+    private static MethodHandle INDY_call819;
+    private static MethodHandle INDY_call819 () throws Throwable {
+        if (INDY_call819 != null) return INDY_call819;
+        CallSite cs = (CallSite) MH_bootstrap819 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap819 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper819 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call819 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap819 (Object l, Object n, Object t) throws Throwable { return _mh[ 819 ].invokeExact(l, n, t); }
+
+    // 820
+    private static MethodType MT_bootstrap820 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap820 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap820", MT_bootstrap820 ());
+    }
+
+    private static MethodHandle INDY_call820;
+    private static MethodHandle INDY_call820 () throws Throwable {
+        if (INDY_call820 != null) return INDY_call820;
+        CallSite cs = (CallSite) MH_bootstrap820 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap820 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper820 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call820 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap820 (Object l, Object n, Object t) throws Throwable { return _mh[ 820 ].invokeExact(l, n, t); }
+
+    // 821
+    private static MethodType MT_bootstrap821 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap821 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap821", MT_bootstrap821 ());
+    }
+
+    private static MethodHandle INDY_call821;
+    private static MethodHandle INDY_call821 () throws Throwable {
+        if (INDY_call821 != null) return INDY_call821;
+        CallSite cs = (CallSite) MH_bootstrap821 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap821 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper821 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call821 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap821 (Object l, Object n, Object t) throws Throwable { return _mh[ 821 ].invokeExact(l, n, t); }
+
+    // 822
+    private static MethodType MT_bootstrap822 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap822 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap822", MT_bootstrap822 ());
+    }
+
+    private static MethodHandle INDY_call822;
+    private static MethodHandle INDY_call822 () throws Throwable {
+        if (INDY_call822 != null) return INDY_call822;
+        CallSite cs = (CallSite) MH_bootstrap822 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap822 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper822 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call822 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap822 (Object l, Object n, Object t) throws Throwable { return _mh[ 822 ].invokeExact(l, n, t); }
+
+    // 823
+    private static MethodType MT_bootstrap823 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap823 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap823", MT_bootstrap823 ());
+    }
+
+    private static MethodHandle INDY_call823;
+    private static MethodHandle INDY_call823 () throws Throwable {
+        if (INDY_call823 != null) return INDY_call823;
+        CallSite cs = (CallSite) MH_bootstrap823 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap823 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper823 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call823 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap823 (Object l, Object n, Object t) throws Throwable { return _mh[ 823 ].invokeExact(l, n, t); }
+
+    // 824
+    private static MethodType MT_bootstrap824 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap824 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap824", MT_bootstrap824 ());
+    }
+
+    private static MethodHandle INDY_call824;
+    private static MethodHandle INDY_call824 () throws Throwable {
+        if (INDY_call824 != null) return INDY_call824;
+        CallSite cs = (CallSite) MH_bootstrap824 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap824 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper824 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call824 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap824 (Object l, Object n, Object t) throws Throwable { return _mh[ 824 ].invokeExact(l, n, t); }
+
+    // 825
+    private static MethodType MT_bootstrap825 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap825 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap825", MT_bootstrap825 ());
+    }
+
+    private static MethodHandle INDY_call825;
+    private static MethodHandle INDY_call825 () throws Throwable {
+        if (INDY_call825 != null) return INDY_call825;
+        CallSite cs = (CallSite) MH_bootstrap825 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap825 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper825 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call825 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap825 (Object l, Object n, Object t) throws Throwable { return _mh[ 825 ].invokeExact(l, n, t); }
+
+    // 826
+    private static MethodType MT_bootstrap826 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap826 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap826", MT_bootstrap826 ());
+    }
+
+    private static MethodHandle INDY_call826;
+    private static MethodHandle INDY_call826 () throws Throwable {
+        if (INDY_call826 != null) return INDY_call826;
+        CallSite cs = (CallSite) MH_bootstrap826 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap826 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper826 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call826 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap826 (Object l, Object n, Object t) throws Throwable { return _mh[ 826 ].invokeExact(l, n, t); }
+
+    // 827
+    private static MethodType MT_bootstrap827 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap827 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap827", MT_bootstrap827 ());
+    }
+
+    private static MethodHandle INDY_call827;
+    private static MethodHandle INDY_call827 () throws Throwable {
+        if (INDY_call827 != null) return INDY_call827;
+        CallSite cs = (CallSite) MH_bootstrap827 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap827 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper827 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call827 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap827 (Object l, Object n, Object t) throws Throwable { return _mh[ 827 ].invokeExact(l, n, t); }
+
+    // 828
+    private static MethodType MT_bootstrap828 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap828 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap828", MT_bootstrap828 ());
+    }
+
+    private static MethodHandle INDY_call828;
+    private static MethodHandle INDY_call828 () throws Throwable {
+        if (INDY_call828 != null) return INDY_call828;
+        CallSite cs = (CallSite) MH_bootstrap828 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap828 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper828 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call828 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap828 (Object l, Object n, Object t) throws Throwable { return _mh[ 828 ].invokeExact(l, n, t); }
+
+    // 829
+    private static MethodType MT_bootstrap829 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap829 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap829", MT_bootstrap829 ());
+    }
+
+    private static MethodHandle INDY_call829;
+    private static MethodHandle INDY_call829 () throws Throwable {
+        if (INDY_call829 != null) return INDY_call829;
+        CallSite cs = (CallSite) MH_bootstrap829 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap829 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper829 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call829 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap829 (Object l, Object n, Object t) throws Throwable { return _mh[ 829 ].invokeExact(l, n, t); }
+
+    // 830
+    private static MethodType MT_bootstrap830 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap830 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap830", MT_bootstrap830 ());
+    }
+
+    private static MethodHandle INDY_call830;
+    private static MethodHandle INDY_call830 () throws Throwable {
+        if (INDY_call830 != null) return INDY_call830;
+        CallSite cs = (CallSite) MH_bootstrap830 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap830 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper830 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call830 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap830 (Object l, Object n, Object t) throws Throwable { return _mh[ 830 ].invokeExact(l, n, t); }
+
+    // 831
+    private static MethodType MT_bootstrap831 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap831 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap831", MT_bootstrap831 ());
+    }
+
+    private static MethodHandle INDY_call831;
+    private static MethodHandle INDY_call831 () throws Throwable {
+        if (INDY_call831 != null) return INDY_call831;
+        CallSite cs = (CallSite) MH_bootstrap831 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap831 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper831 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call831 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap831 (Object l, Object n, Object t) throws Throwable { return _mh[ 831 ].invokeExact(l, n, t); }
+
+    // 832
+    private static MethodType MT_bootstrap832 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap832 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap832", MT_bootstrap832 ());
+    }
+
+    private static MethodHandle INDY_call832;
+    private static MethodHandle INDY_call832 () throws Throwable {
+        if (INDY_call832 != null) return INDY_call832;
+        CallSite cs = (CallSite) MH_bootstrap832 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap832 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper832 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call832 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap832 (Object l, Object n, Object t) throws Throwable { return _mh[ 832 ].invokeExact(l, n, t); }
+
+    // 833
+    private static MethodType MT_bootstrap833 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap833 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap833", MT_bootstrap833 ());
+    }
+
+    private static MethodHandle INDY_call833;
+    private static MethodHandle INDY_call833 () throws Throwable {
+        if (INDY_call833 != null) return INDY_call833;
+        CallSite cs = (CallSite) MH_bootstrap833 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap833 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper833 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call833 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap833 (Object l, Object n, Object t) throws Throwable { return _mh[ 833 ].invokeExact(l, n, t); }
+
+    // 834
+    private static MethodType MT_bootstrap834 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap834 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap834", MT_bootstrap834 ());
+    }
+
+    private static MethodHandle INDY_call834;
+    private static MethodHandle INDY_call834 () throws Throwable {
+        if (INDY_call834 != null) return INDY_call834;
+        CallSite cs = (CallSite) MH_bootstrap834 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap834 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper834 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call834 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap834 (Object l, Object n, Object t) throws Throwable { return _mh[ 834 ].invokeExact(l, n, t); }
+
+    // 835
+    private static MethodType MT_bootstrap835 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap835 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap835", MT_bootstrap835 ());
+    }
+
+    private static MethodHandle INDY_call835;
+    private static MethodHandle INDY_call835 () throws Throwable {
+        if (INDY_call835 != null) return INDY_call835;
+        CallSite cs = (CallSite) MH_bootstrap835 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap835 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper835 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call835 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap835 (Object l, Object n, Object t) throws Throwable { return _mh[ 835 ].invokeExact(l, n, t); }
+
+    // 836
+    private static MethodType MT_bootstrap836 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap836 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap836", MT_bootstrap836 ());
+    }
+
+    private static MethodHandle INDY_call836;
+    private static MethodHandle INDY_call836 () throws Throwable {
+        if (INDY_call836 != null) return INDY_call836;
+        CallSite cs = (CallSite) MH_bootstrap836 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap836 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper836 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call836 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap836 (Object l, Object n, Object t) throws Throwable { return _mh[ 836 ].invokeExact(l, n, t); }
+
+    // 837
+    private static MethodType MT_bootstrap837 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap837 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap837", MT_bootstrap837 ());
+    }
+
+    private static MethodHandle INDY_call837;
+    private static MethodHandle INDY_call837 () throws Throwable {
+        if (INDY_call837 != null) return INDY_call837;
+        CallSite cs = (CallSite) MH_bootstrap837 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap837 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper837 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call837 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap837 (Object l, Object n, Object t) throws Throwable { return _mh[ 837 ].invokeExact(l, n, t); }
+
+    // 838
+    private static MethodType MT_bootstrap838 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap838 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap838", MT_bootstrap838 ());
+    }
+
+    private static MethodHandle INDY_call838;
+    private static MethodHandle INDY_call838 () throws Throwable {
+        if (INDY_call838 != null) return INDY_call838;
+        CallSite cs = (CallSite) MH_bootstrap838 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap838 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper838 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call838 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap838 (Object l, Object n, Object t) throws Throwable { return _mh[ 838 ].invokeExact(l, n, t); }
+
+    // 839
+    private static MethodType MT_bootstrap839 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap839 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap839", MT_bootstrap839 ());
+    }
+
+    private static MethodHandle INDY_call839;
+    private static MethodHandle INDY_call839 () throws Throwable {
+        if (INDY_call839 != null) return INDY_call839;
+        CallSite cs = (CallSite) MH_bootstrap839 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap839 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper839 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call839 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap839 (Object l, Object n, Object t) throws Throwable { return _mh[ 839 ].invokeExact(l, n, t); }
+
+    // 840
+    private static MethodType MT_bootstrap840 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap840 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap840", MT_bootstrap840 ());
+    }
+
+    private static MethodHandle INDY_call840;
+    private static MethodHandle INDY_call840 () throws Throwable {
+        if (INDY_call840 != null) return INDY_call840;
+        CallSite cs = (CallSite) MH_bootstrap840 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap840 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper840 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call840 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap840 (Object l, Object n, Object t) throws Throwable { return _mh[ 840 ].invokeExact(l, n, t); }
+
+    // 841
+    private static MethodType MT_bootstrap841 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap841 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap841", MT_bootstrap841 ());
+    }
+
+    private static MethodHandle INDY_call841;
+    private static MethodHandle INDY_call841 () throws Throwable {
+        if (INDY_call841 != null) return INDY_call841;
+        CallSite cs = (CallSite) MH_bootstrap841 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap841 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper841 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call841 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap841 (Object l, Object n, Object t) throws Throwable { return _mh[ 841 ].invokeExact(l, n, t); }
+
+    // 842
+    private static MethodType MT_bootstrap842 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap842 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap842", MT_bootstrap842 ());
+    }
+
+    private static MethodHandle INDY_call842;
+    private static MethodHandle INDY_call842 () throws Throwable {
+        if (INDY_call842 != null) return INDY_call842;
+        CallSite cs = (CallSite) MH_bootstrap842 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap842 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper842 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call842 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap842 (Object l, Object n, Object t) throws Throwable { return _mh[ 842 ].invokeExact(l, n, t); }
+
+    // 843
+    private static MethodType MT_bootstrap843 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap843 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap843", MT_bootstrap843 ());
+    }
+
+    private static MethodHandle INDY_call843;
+    private static MethodHandle INDY_call843 () throws Throwable {
+        if (INDY_call843 != null) return INDY_call843;
+        CallSite cs = (CallSite) MH_bootstrap843 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap843 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper843 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call843 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap843 (Object l, Object n, Object t) throws Throwable { return _mh[ 843 ].invokeExact(l, n, t); }
+
+    // 844
+    private static MethodType MT_bootstrap844 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap844 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap844", MT_bootstrap844 ());
+    }
+
+    private static MethodHandle INDY_call844;
+    private static MethodHandle INDY_call844 () throws Throwable {
+        if (INDY_call844 != null) return INDY_call844;
+        CallSite cs = (CallSite) MH_bootstrap844 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap844 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper844 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call844 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap844 (Object l, Object n, Object t) throws Throwable { return _mh[ 844 ].invokeExact(l, n, t); }
+
+    // 845
+    private static MethodType MT_bootstrap845 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap845 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap845", MT_bootstrap845 ());
+    }
+
+    private static MethodHandle INDY_call845;
+    private static MethodHandle INDY_call845 () throws Throwable {
+        if (INDY_call845 != null) return INDY_call845;
+        CallSite cs = (CallSite) MH_bootstrap845 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap845 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper845 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call845 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap845 (Object l, Object n, Object t) throws Throwable { return _mh[ 845 ].invokeExact(l, n, t); }
+
+    // 846
+    private static MethodType MT_bootstrap846 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap846 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap846", MT_bootstrap846 ());
+    }
+
+    private static MethodHandle INDY_call846;
+    private static MethodHandle INDY_call846 () throws Throwable {
+        if (INDY_call846 != null) return INDY_call846;
+        CallSite cs = (CallSite) MH_bootstrap846 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap846 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper846 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call846 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap846 (Object l, Object n, Object t) throws Throwable { return _mh[ 846 ].invokeExact(l, n, t); }
+
+    // 847
+    private static MethodType MT_bootstrap847 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap847 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap847", MT_bootstrap847 ());
+    }
+
+    private static MethodHandle INDY_call847;
+    private static MethodHandle INDY_call847 () throws Throwable {
+        if (INDY_call847 != null) return INDY_call847;
+        CallSite cs = (CallSite) MH_bootstrap847 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap847 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper847 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call847 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap847 (Object l, Object n, Object t) throws Throwable { return _mh[ 847 ].invokeExact(l, n, t); }
+
+    // 848
+    private static MethodType MT_bootstrap848 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap848 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap848", MT_bootstrap848 ());
+    }
+
+    private static MethodHandle INDY_call848;
+    private static MethodHandle INDY_call848 () throws Throwable {
+        if (INDY_call848 != null) return INDY_call848;
+        CallSite cs = (CallSite) MH_bootstrap848 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap848 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper848 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call848 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap848 (Object l, Object n, Object t) throws Throwable { return _mh[ 848 ].invokeExact(l, n, t); }
+
+    // 849
+    private static MethodType MT_bootstrap849 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap849 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap849", MT_bootstrap849 ());
+    }
+
+    private static MethodHandle INDY_call849;
+    private static MethodHandle INDY_call849 () throws Throwable {
+        if (INDY_call849 != null) return INDY_call849;
+        CallSite cs = (CallSite) MH_bootstrap849 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap849 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper849 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call849 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap849 (Object l, Object n, Object t) throws Throwable { return _mh[ 849 ].invokeExact(l, n, t); }
+
+    // 850
+    private static MethodType MT_bootstrap850 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap850 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap850", MT_bootstrap850 ());
+    }
+
+    private static MethodHandle INDY_call850;
+    private static MethodHandle INDY_call850 () throws Throwable {
+        if (INDY_call850 != null) return INDY_call850;
+        CallSite cs = (CallSite) MH_bootstrap850 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap850 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper850 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call850 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap850 (Object l, Object n, Object t) throws Throwable { return _mh[ 850 ].invokeExact(l, n, t); }
+
+    // 851
+    private static MethodType MT_bootstrap851 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap851 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap851", MT_bootstrap851 ());
+    }
+
+    private static MethodHandle INDY_call851;
+    private static MethodHandle INDY_call851 () throws Throwable {
+        if (INDY_call851 != null) return INDY_call851;
+        CallSite cs = (CallSite) MH_bootstrap851 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap851 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper851 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call851 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap851 (Object l, Object n, Object t) throws Throwable { return _mh[ 851 ].invokeExact(l, n, t); }
+
+    // 852
+    private static MethodType MT_bootstrap852 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap852 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap852", MT_bootstrap852 ());
+    }
+
+    private static MethodHandle INDY_call852;
+    private static MethodHandle INDY_call852 () throws Throwable {
+        if (INDY_call852 != null) return INDY_call852;
+        CallSite cs = (CallSite) MH_bootstrap852 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap852 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper852 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call852 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap852 (Object l, Object n, Object t) throws Throwable { return _mh[ 852 ].invokeExact(l, n, t); }
+
+    // 853
+    private static MethodType MT_bootstrap853 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap853 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap853", MT_bootstrap853 ());
+    }
+
+    private static MethodHandle INDY_call853;
+    private static MethodHandle INDY_call853 () throws Throwable {
+        if (INDY_call853 != null) return INDY_call853;
+        CallSite cs = (CallSite) MH_bootstrap853 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap853 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper853 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call853 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap853 (Object l, Object n, Object t) throws Throwable { return _mh[ 853 ].invokeExact(l, n, t); }
+
+    // 854
+    private static MethodType MT_bootstrap854 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap854 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap854", MT_bootstrap854 ());
+    }
+
+    private static MethodHandle INDY_call854;
+    private static MethodHandle INDY_call854 () throws Throwable {
+        if (INDY_call854 != null) return INDY_call854;
+        CallSite cs = (CallSite) MH_bootstrap854 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap854 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper854 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call854 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap854 (Object l, Object n, Object t) throws Throwable { return _mh[ 854 ].invokeExact(l, n, t); }
+
+    // 855
+    private static MethodType MT_bootstrap855 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap855 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap855", MT_bootstrap855 ());
+    }
+
+    private static MethodHandle INDY_call855;
+    private static MethodHandle INDY_call855 () throws Throwable {
+        if (INDY_call855 != null) return INDY_call855;
+        CallSite cs = (CallSite) MH_bootstrap855 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap855 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper855 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call855 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap855 (Object l, Object n, Object t) throws Throwable { return _mh[ 855 ].invokeExact(l, n, t); }
+
+    // 856
+    private static MethodType MT_bootstrap856 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap856 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap856", MT_bootstrap856 ());
+    }
+
+    private static MethodHandle INDY_call856;
+    private static MethodHandle INDY_call856 () throws Throwable {
+        if (INDY_call856 != null) return INDY_call856;
+        CallSite cs = (CallSite) MH_bootstrap856 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap856 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper856 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call856 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap856 (Object l, Object n, Object t) throws Throwable { return _mh[ 856 ].invokeExact(l, n, t); }
+
+    // 857
+    private static MethodType MT_bootstrap857 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap857 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap857", MT_bootstrap857 ());
+    }
+
+    private static MethodHandle INDY_call857;
+    private static MethodHandle INDY_call857 () throws Throwable {
+        if (INDY_call857 != null) return INDY_call857;
+        CallSite cs = (CallSite) MH_bootstrap857 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap857 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper857 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call857 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap857 (Object l, Object n, Object t) throws Throwable { return _mh[ 857 ].invokeExact(l, n, t); }
+
+    // 858
+    private static MethodType MT_bootstrap858 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap858 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap858", MT_bootstrap858 ());
+    }
+
+    private static MethodHandle INDY_call858;
+    private static MethodHandle INDY_call858 () throws Throwable {
+        if (INDY_call858 != null) return INDY_call858;
+        CallSite cs = (CallSite) MH_bootstrap858 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap858 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper858 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call858 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap858 (Object l, Object n, Object t) throws Throwable { return _mh[ 858 ].invokeExact(l, n, t); }
+
+    // 859
+    private static MethodType MT_bootstrap859 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap859 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap859", MT_bootstrap859 ());
+    }
+
+    private static MethodHandle INDY_call859;
+    private static MethodHandle INDY_call859 () throws Throwable {
+        if (INDY_call859 != null) return INDY_call859;
+        CallSite cs = (CallSite) MH_bootstrap859 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap859 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper859 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call859 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap859 (Object l, Object n, Object t) throws Throwable { return _mh[ 859 ].invokeExact(l, n, t); }
+
+    // 860
+    private static MethodType MT_bootstrap860 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap860 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap860", MT_bootstrap860 ());
+    }
+
+    private static MethodHandle INDY_call860;
+    private static MethodHandle INDY_call860 () throws Throwable {
+        if (INDY_call860 != null) return INDY_call860;
+        CallSite cs = (CallSite) MH_bootstrap860 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap860 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper860 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call860 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap860 (Object l, Object n, Object t) throws Throwable { return _mh[ 860 ].invokeExact(l, n, t); }
+
+    // 861
+    private static MethodType MT_bootstrap861 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap861 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap861", MT_bootstrap861 ());
+    }
+
+    private static MethodHandle INDY_call861;
+    private static MethodHandle INDY_call861 () throws Throwable {
+        if (INDY_call861 != null) return INDY_call861;
+        CallSite cs = (CallSite) MH_bootstrap861 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap861 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper861 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call861 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap861 (Object l, Object n, Object t) throws Throwable { return _mh[ 861 ].invokeExact(l, n, t); }
+
+    // 862
+    private static MethodType MT_bootstrap862 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap862 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap862", MT_bootstrap862 ());
+    }
+
+    private static MethodHandle INDY_call862;
+    private static MethodHandle INDY_call862 () throws Throwable {
+        if (INDY_call862 != null) return INDY_call862;
+        CallSite cs = (CallSite) MH_bootstrap862 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap862 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper862 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call862 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap862 (Object l, Object n, Object t) throws Throwable { return _mh[ 862 ].invokeExact(l, n, t); }
+
+    // 863
+    private static MethodType MT_bootstrap863 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap863 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap863", MT_bootstrap863 ());
+    }
+
+    private static MethodHandle INDY_call863;
+    private static MethodHandle INDY_call863 () throws Throwable {
+        if (INDY_call863 != null) return INDY_call863;
+        CallSite cs = (CallSite) MH_bootstrap863 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap863 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper863 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call863 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap863 (Object l, Object n, Object t) throws Throwable { return _mh[ 863 ].invokeExact(l, n, t); }
+
+    // 864
+    private static MethodType MT_bootstrap864 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap864 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap864", MT_bootstrap864 ());
+    }
+
+    private static MethodHandle INDY_call864;
+    private static MethodHandle INDY_call864 () throws Throwable {
+        if (INDY_call864 != null) return INDY_call864;
+        CallSite cs = (CallSite) MH_bootstrap864 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap864 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper864 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call864 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap864 (Object l, Object n, Object t) throws Throwable { return _mh[ 864 ].invokeExact(l, n, t); }
+
+    // 865
+    private static MethodType MT_bootstrap865 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap865 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap865", MT_bootstrap865 ());
+    }
+
+    private static MethodHandle INDY_call865;
+    private static MethodHandle INDY_call865 () throws Throwable {
+        if (INDY_call865 != null) return INDY_call865;
+        CallSite cs = (CallSite) MH_bootstrap865 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap865 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper865 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call865 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap865 (Object l, Object n, Object t) throws Throwable { return _mh[ 865 ].invokeExact(l, n, t); }
+
+    // 866
+    private static MethodType MT_bootstrap866 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap866 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap866", MT_bootstrap866 ());
+    }
+
+    private static MethodHandle INDY_call866;
+    private static MethodHandle INDY_call866 () throws Throwable {
+        if (INDY_call866 != null) return INDY_call866;
+        CallSite cs = (CallSite) MH_bootstrap866 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap866 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper866 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call866 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap866 (Object l, Object n, Object t) throws Throwable { return _mh[ 866 ].invokeExact(l, n, t); }
+
+    // 867
+    private static MethodType MT_bootstrap867 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap867 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap867", MT_bootstrap867 ());
+    }
+
+    private static MethodHandle INDY_call867;
+    private static MethodHandle INDY_call867 () throws Throwable {
+        if (INDY_call867 != null) return INDY_call867;
+        CallSite cs = (CallSite) MH_bootstrap867 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap867 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper867 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call867 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap867 (Object l, Object n, Object t) throws Throwable { return _mh[ 867 ].invokeExact(l, n, t); }
+
+    // 868
+    private static MethodType MT_bootstrap868 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap868 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap868", MT_bootstrap868 ());
+    }
+
+    private static MethodHandle INDY_call868;
+    private static MethodHandle INDY_call868 () throws Throwable {
+        if (INDY_call868 != null) return INDY_call868;
+        CallSite cs = (CallSite) MH_bootstrap868 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap868 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper868 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call868 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap868 (Object l, Object n, Object t) throws Throwable { return _mh[ 868 ].invokeExact(l, n, t); }
+
+    // 869
+    private static MethodType MT_bootstrap869 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap869 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap869", MT_bootstrap869 ());
+    }
+
+    private static MethodHandle INDY_call869;
+    private static MethodHandle INDY_call869 () throws Throwable {
+        if (INDY_call869 != null) return INDY_call869;
+        CallSite cs = (CallSite) MH_bootstrap869 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap869 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper869 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call869 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap869 (Object l, Object n, Object t) throws Throwable { return _mh[ 869 ].invokeExact(l, n, t); }
+
+    // 870
+    private static MethodType MT_bootstrap870 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap870 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap870", MT_bootstrap870 ());
+    }
+
+    private static MethodHandle INDY_call870;
+    private static MethodHandle INDY_call870 () throws Throwable {
+        if (INDY_call870 != null) return INDY_call870;
+        CallSite cs = (CallSite) MH_bootstrap870 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap870 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper870 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call870 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap870 (Object l, Object n, Object t) throws Throwable { return _mh[ 870 ].invokeExact(l, n, t); }
+
+    // 871
+    private static MethodType MT_bootstrap871 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap871 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap871", MT_bootstrap871 ());
+    }
+
+    private static MethodHandle INDY_call871;
+    private static MethodHandle INDY_call871 () throws Throwable {
+        if (INDY_call871 != null) return INDY_call871;
+        CallSite cs = (CallSite) MH_bootstrap871 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap871 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper871 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call871 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap871 (Object l, Object n, Object t) throws Throwable { return _mh[ 871 ].invokeExact(l, n, t); }
+
+    // 872
+    private static MethodType MT_bootstrap872 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap872 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap872", MT_bootstrap872 ());
+    }
+
+    private static MethodHandle INDY_call872;
+    private static MethodHandle INDY_call872 () throws Throwable {
+        if (INDY_call872 != null) return INDY_call872;
+        CallSite cs = (CallSite) MH_bootstrap872 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap872 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper872 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call872 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap872 (Object l, Object n, Object t) throws Throwable { return _mh[ 872 ].invokeExact(l, n, t); }
+
+    // 873
+    private static MethodType MT_bootstrap873 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap873 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap873", MT_bootstrap873 ());
+    }
+
+    private static MethodHandle INDY_call873;
+    private static MethodHandle INDY_call873 () throws Throwable {
+        if (INDY_call873 != null) return INDY_call873;
+        CallSite cs = (CallSite) MH_bootstrap873 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap873 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper873 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call873 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap873 (Object l, Object n, Object t) throws Throwable { return _mh[ 873 ].invokeExact(l, n, t); }
+
+    // 874
+    private static MethodType MT_bootstrap874 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap874 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap874", MT_bootstrap874 ());
+    }
+
+    private static MethodHandle INDY_call874;
+    private static MethodHandle INDY_call874 () throws Throwable {
+        if (INDY_call874 != null) return INDY_call874;
+        CallSite cs = (CallSite) MH_bootstrap874 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap874 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper874 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call874 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap874 (Object l, Object n, Object t) throws Throwable { return _mh[ 874 ].invokeExact(l, n, t); }
+
+    // 875
+    private static MethodType MT_bootstrap875 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap875 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap875", MT_bootstrap875 ());
+    }
+
+    private static MethodHandle INDY_call875;
+    private static MethodHandle INDY_call875 () throws Throwable {
+        if (INDY_call875 != null) return INDY_call875;
+        CallSite cs = (CallSite) MH_bootstrap875 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap875 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper875 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call875 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap875 (Object l, Object n, Object t) throws Throwable { return _mh[ 875 ].invokeExact(l, n, t); }
+
+    // 876
+    private static MethodType MT_bootstrap876 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap876 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap876", MT_bootstrap876 ());
+    }
+
+    private static MethodHandle INDY_call876;
+    private static MethodHandle INDY_call876 () throws Throwable {
+        if (INDY_call876 != null) return INDY_call876;
+        CallSite cs = (CallSite) MH_bootstrap876 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap876 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper876 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call876 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap876 (Object l, Object n, Object t) throws Throwable { return _mh[ 876 ].invokeExact(l, n, t); }
+
+    // 877
+    private static MethodType MT_bootstrap877 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap877 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap877", MT_bootstrap877 ());
+    }
+
+    private static MethodHandle INDY_call877;
+    private static MethodHandle INDY_call877 () throws Throwable {
+        if (INDY_call877 != null) return INDY_call877;
+        CallSite cs = (CallSite) MH_bootstrap877 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap877 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper877 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call877 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap877 (Object l, Object n, Object t) throws Throwable { return _mh[ 877 ].invokeExact(l, n, t); }
+
+    // 878
+    private static MethodType MT_bootstrap878 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap878 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap878", MT_bootstrap878 ());
+    }
+
+    private static MethodHandle INDY_call878;
+    private static MethodHandle INDY_call878 () throws Throwable {
+        if (INDY_call878 != null) return INDY_call878;
+        CallSite cs = (CallSite) MH_bootstrap878 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap878 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper878 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call878 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap878 (Object l, Object n, Object t) throws Throwable { return _mh[ 878 ].invokeExact(l, n, t); }
+
+    // 879
+    private static MethodType MT_bootstrap879 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap879 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap879", MT_bootstrap879 ());
+    }
+
+    private static MethodHandle INDY_call879;
+    private static MethodHandle INDY_call879 () throws Throwable {
+        if (INDY_call879 != null) return INDY_call879;
+        CallSite cs = (CallSite) MH_bootstrap879 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap879 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper879 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call879 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap879 (Object l, Object n, Object t) throws Throwable { return _mh[ 879 ].invokeExact(l, n, t); }
+
+    // 880
+    private static MethodType MT_bootstrap880 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap880 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap880", MT_bootstrap880 ());
+    }
+
+    private static MethodHandle INDY_call880;
+    private static MethodHandle INDY_call880 () throws Throwable {
+        if (INDY_call880 != null) return INDY_call880;
+        CallSite cs = (CallSite) MH_bootstrap880 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap880 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper880 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call880 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap880 (Object l, Object n, Object t) throws Throwable { return _mh[ 880 ].invokeExact(l, n, t); }
+
+    // 881
+    private static MethodType MT_bootstrap881 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap881 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap881", MT_bootstrap881 ());
+    }
+
+    private static MethodHandle INDY_call881;
+    private static MethodHandle INDY_call881 () throws Throwable {
+        if (INDY_call881 != null) return INDY_call881;
+        CallSite cs = (CallSite) MH_bootstrap881 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap881 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper881 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call881 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap881 (Object l, Object n, Object t) throws Throwable { return _mh[ 881 ].invokeExact(l, n, t); }
+
+    // 882
+    private static MethodType MT_bootstrap882 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap882 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap882", MT_bootstrap882 ());
+    }
+
+    private static MethodHandle INDY_call882;
+    private static MethodHandle INDY_call882 () throws Throwable {
+        if (INDY_call882 != null) return INDY_call882;
+        CallSite cs = (CallSite) MH_bootstrap882 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap882 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper882 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call882 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap882 (Object l, Object n, Object t) throws Throwable { return _mh[ 882 ].invokeExact(l, n, t); }
+
+    // 883
+    private static MethodType MT_bootstrap883 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap883 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap883", MT_bootstrap883 ());
+    }
+
+    private static MethodHandle INDY_call883;
+    private static MethodHandle INDY_call883 () throws Throwable {
+        if (INDY_call883 != null) return INDY_call883;
+        CallSite cs = (CallSite) MH_bootstrap883 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap883 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper883 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call883 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap883 (Object l, Object n, Object t) throws Throwable { return _mh[ 883 ].invokeExact(l, n, t); }
+
+    // 884
+    private static MethodType MT_bootstrap884 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap884 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap884", MT_bootstrap884 ());
+    }
+
+    private static MethodHandle INDY_call884;
+    private static MethodHandle INDY_call884 () throws Throwable {
+        if (INDY_call884 != null) return INDY_call884;
+        CallSite cs = (CallSite) MH_bootstrap884 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap884 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper884 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call884 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap884 (Object l, Object n, Object t) throws Throwable { return _mh[ 884 ].invokeExact(l, n, t); }
+
+    // 885
+    private static MethodType MT_bootstrap885 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap885 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap885", MT_bootstrap885 ());
+    }
+
+    private static MethodHandle INDY_call885;
+    private static MethodHandle INDY_call885 () throws Throwable {
+        if (INDY_call885 != null) return INDY_call885;
+        CallSite cs = (CallSite) MH_bootstrap885 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap885 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper885 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call885 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap885 (Object l, Object n, Object t) throws Throwable { return _mh[ 885 ].invokeExact(l, n, t); }
+
+    // 886
+    private static MethodType MT_bootstrap886 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap886 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap886", MT_bootstrap886 ());
+    }
+
+    private static MethodHandle INDY_call886;
+    private static MethodHandle INDY_call886 () throws Throwable {
+        if (INDY_call886 != null) return INDY_call886;
+        CallSite cs = (CallSite) MH_bootstrap886 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap886 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper886 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call886 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap886 (Object l, Object n, Object t) throws Throwable { return _mh[ 886 ].invokeExact(l, n, t); }
+
+    // 887
+    private static MethodType MT_bootstrap887 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap887 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap887", MT_bootstrap887 ());
+    }
+
+    private static MethodHandle INDY_call887;
+    private static MethodHandle INDY_call887 () throws Throwable {
+        if (INDY_call887 != null) return INDY_call887;
+        CallSite cs = (CallSite) MH_bootstrap887 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap887 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper887 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call887 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap887 (Object l, Object n, Object t) throws Throwable { return _mh[ 887 ].invokeExact(l, n, t); }
+
+    // 888
+    private static MethodType MT_bootstrap888 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap888 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap888", MT_bootstrap888 ());
+    }
+
+    private static MethodHandle INDY_call888;
+    private static MethodHandle INDY_call888 () throws Throwable {
+        if (INDY_call888 != null) return INDY_call888;
+        CallSite cs = (CallSite) MH_bootstrap888 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap888 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper888 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call888 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap888 (Object l, Object n, Object t) throws Throwable { return _mh[ 888 ].invokeExact(l, n, t); }
+
+    // 889
+    private static MethodType MT_bootstrap889 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap889 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap889", MT_bootstrap889 ());
+    }
+
+    private static MethodHandle INDY_call889;
+    private static MethodHandle INDY_call889 () throws Throwable {
+        if (INDY_call889 != null) return INDY_call889;
+        CallSite cs = (CallSite) MH_bootstrap889 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap889 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper889 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call889 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap889 (Object l, Object n, Object t) throws Throwable { return _mh[ 889 ].invokeExact(l, n, t); }
+
+    // 890
+    private static MethodType MT_bootstrap890 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap890 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap890", MT_bootstrap890 ());
+    }
+
+    private static MethodHandle INDY_call890;
+    private static MethodHandle INDY_call890 () throws Throwable {
+        if (INDY_call890 != null) return INDY_call890;
+        CallSite cs = (CallSite) MH_bootstrap890 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap890 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper890 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call890 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap890 (Object l, Object n, Object t) throws Throwable { return _mh[ 890 ].invokeExact(l, n, t); }
+
+    // 891
+    private static MethodType MT_bootstrap891 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap891 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap891", MT_bootstrap891 ());
+    }
+
+    private static MethodHandle INDY_call891;
+    private static MethodHandle INDY_call891 () throws Throwable {
+        if (INDY_call891 != null) return INDY_call891;
+        CallSite cs = (CallSite) MH_bootstrap891 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap891 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper891 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call891 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap891 (Object l, Object n, Object t) throws Throwable { return _mh[ 891 ].invokeExact(l, n, t); }
+
+    // 892
+    private static MethodType MT_bootstrap892 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap892 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap892", MT_bootstrap892 ());
+    }
+
+    private static MethodHandle INDY_call892;
+    private static MethodHandle INDY_call892 () throws Throwable {
+        if (INDY_call892 != null) return INDY_call892;
+        CallSite cs = (CallSite) MH_bootstrap892 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap892 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper892 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call892 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap892 (Object l, Object n, Object t) throws Throwable { return _mh[ 892 ].invokeExact(l, n, t); }
+
+    // 893
+    private static MethodType MT_bootstrap893 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap893 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap893", MT_bootstrap893 ());
+    }
+
+    private static MethodHandle INDY_call893;
+    private static MethodHandle INDY_call893 () throws Throwable {
+        if (INDY_call893 != null) return INDY_call893;
+        CallSite cs = (CallSite) MH_bootstrap893 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap893 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper893 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call893 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap893 (Object l, Object n, Object t) throws Throwable { return _mh[ 893 ].invokeExact(l, n, t); }
+
+    // 894
+    private static MethodType MT_bootstrap894 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap894 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap894", MT_bootstrap894 ());
+    }
+
+    private static MethodHandle INDY_call894;
+    private static MethodHandle INDY_call894 () throws Throwable {
+        if (INDY_call894 != null) return INDY_call894;
+        CallSite cs = (CallSite) MH_bootstrap894 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap894 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper894 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call894 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap894 (Object l, Object n, Object t) throws Throwable { return _mh[ 894 ].invokeExact(l, n, t); }
+
+    // 895
+    private static MethodType MT_bootstrap895 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap895 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap895", MT_bootstrap895 ());
+    }
+
+    private static MethodHandle INDY_call895;
+    private static MethodHandle INDY_call895 () throws Throwable {
+        if (INDY_call895 != null) return INDY_call895;
+        CallSite cs = (CallSite) MH_bootstrap895 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap895 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper895 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call895 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap895 (Object l, Object n, Object t) throws Throwable { return _mh[ 895 ].invokeExact(l, n, t); }
+
+    // 896
+    private static MethodType MT_bootstrap896 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap896 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap896", MT_bootstrap896 ());
+    }
+
+    private static MethodHandle INDY_call896;
+    private static MethodHandle INDY_call896 () throws Throwable {
+        if (INDY_call896 != null) return INDY_call896;
+        CallSite cs = (CallSite) MH_bootstrap896 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap896 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper896 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call896 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap896 (Object l, Object n, Object t) throws Throwable { return _mh[ 896 ].invokeExact(l, n, t); }
+
+    // 897
+    private static MethodType MT_bootstrap897 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap897 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap897", MT_bootstrap897 ());
+    }
+
+    private static MethodHandle INDY_call897;
+    private static MethodHandle INDY_call897 () throws Throwable {
+        if (INDY_call897 != null) return INDY_call897;
+        CallSite cs = (CallSite) MH_bootstrap897 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap897 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper897 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call897 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap897 (Object l, Object n, Object t) throws Throwable { return _mh[ 897 ].invokeExact(l, n, t); }
+
+    // 898
+    private static MethodType MT_bootstrap898 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap898 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap898", MT_bootstrap898 ());
+    }
+
+    private static MethodHandle INDY_call898;
+    private static MethodHandle INDY_call898 () throws Throwable {
+        if (INDY_call898 != null) return INDY_call898;
+        CallSite cs = (CallSite) MH_bootstrap898 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap898 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper898 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call898 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap898 (Object l, Object n, Object t) throws Throwable { return _mh[ 898 ].invokeExact(l, n, t); }
+
+    // 899
+    private static MethodType MT_bootstrap899 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap899 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap899", MT_bootstrap899 ());
+    }
+
+    private static MethodHandle INDY_call899;
+    private static MethodHandle INDY_call899 () throws Throwable {
+        if (INDY_call899 != null) return INDY_call899;
+        CallSite cs = (CallSite) MH_bootstrap899 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap899 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper899 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call899 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap899 (Object l, Object n, Object t) throws Throwable { return _mh[ 899 ].invokeExact(l, n, t); }
+
+    // 900
+    private static MethodType MT_bootstrap900 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap900 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap900", MT_bootstrap900 ());
+    }
+
+    private static MethodHandle INDY_call900;
+    private static MethodHandle INDY_call900 () throws Throwable {
+        if (INDY_call900 != null) return INDY_call900;
+        CallSite cs = (CallSite) MH_bootstrap900 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap900 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper900 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call900 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap900 (Object l, Object n, Object t) throws Throwable { return _mh[ 900 ].invokeExact(l, n, t); }
+
+    // 901
+    private static MethodType MT_bootstrap901 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap901 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap901", MT_bootstrap901 ());
+    }
+
+    private static MethodHandle INDY_call901;
+    private static MethodHandle INDY_call901 () throws Throwable {
+        if (INDY_call901 != null) return INDY_call901;
+        CallSite cs = (CallSite) MH_bootstrap901 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap901 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper901 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call901 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap901 (Object l, Object n, Object t) throws Throwable { return _mh[ 901 ].invokeExact(l, n, t); }
+
+    // 902
+    private static MethodType MT_bootstrap902 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap902 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap902", MT_bootstrap902 ());
+    }
+
+    private static MethodHandle INDY_call902;
+    private static MethodHandle INDY_call902 () throws Throwable {
+        if (INDY_call902 != null) return INDY_call902;
+        CallSite cs = (CallSite) MH_bootstrap902 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap902 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper902 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call902 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap902 (Object l, Object n, Object t) throws Throwable { return _mh[ 902 ].invokeExact(l, n, t); }
+
+    // 903
+    private static MethodType MT_bootstrap903 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap903 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap903", MT_bootstrap903 ());
+    }
+
+    private static MethodHandle INDY_call903;
+    private static MethodHandle INDY_call903 () throws Throwable {
+        if (INDY_call903 != null) return INDY_call903;
+        CallSite cs = (CallSite) MH_bootstrap903 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap903 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper903 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call903 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap903 (Object l, Object n, Object t) throws Throwable { return _mh[ 903 ].invokeExact(l, n, t); }
+
+    // 904
+    private static MethodType MT_bootstrap904 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap904 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap904", MT_bootstrap904 ());
+    }
+
+    private static MethodHandle INDY_call904;
+    private static MethodHandle INDY_call904 () throws Throwable {
+        if (INDY_call904 != null) return INDY_call904;
+        CallSite cs = (CallSite) MH_bootstrap904 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap904 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper904 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call904 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap904 (Object l, Object n, Object t) throws Throwable { return _mh[ 904 ].invokeExact(l, n, t); }
+
+    // 905
+    private static MethodType MT_bootstrap905 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap905 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap905", MT_bootstrap905 ());
+    }
+
+    private static MethodHandle INDY_call905;
+    private static MethodHandle INDY_call905 () throws Throwable {
+        if (INDY_call905 != null) return INDY_call905;
+        CallSite cs = (CallSite) MH_bootstrap905 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap905 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper905 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call905 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap905 (Object l, Object n, Object t) throws Throwable { return _mh[ 905 ].invokeExact(l, n, t); }
+
+    // 906
+    private static MethodType MT_bootstrap906 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap906 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap906", MT_bootstrap906 ());
+    }
+
+    private static MethodHandle INDY_call906;
+    private static MethodHandle INDY_call906 () throws Throwable {
+        if (INDY_call906 != null) return INDY_call906;
+        CallSite cs = (CallSite) MH_bootstrap906 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap906 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper906 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call906 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap906 (Object l, Object n, Object t) throws Throwable { return _mh[ 906 ].invokeExact(l, n, t); }
+
+    // 907
+    private static MethodType MT_bootstrap907 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap907 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap907", MT_bootstrap907 ());
+    }
+
+    private static MethodHandle INDY_call907;
+    private static MethodHandle INDY_call907 () throws Throwable {
+        if (INDY_call907 != null) return INDY_call907;
+        CallSite cs = (CallSite) MH_bootstrap907 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap907 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper907 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call907 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap907 (Object l, Object n, Object t) throws Throwable { return _mh[ 907 ].invokeExact(l, n, t); }
+
+    // 908
+    private static MethodType MT_bootstrap908 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap908 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap908", MT_bootstrap908 ());
+    }
+
+    private static MethodHandle INDY_call908;
+    private static MethodHandle INDY_call908 () throws Throwable {
+        if (INDY_call908 != null) return INDY_call908;
+        CallSite cs = (CallSite) MH_bootstrap908 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap908 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper908 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call908 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap908 (Object l, Object n, Object t) throws Throwable { return _mh[ 908 ].invokeExact(l, n, t); }
+
+    // 909
+    private static MethodType MT_bootstrap909 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap909 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap909", MT_bootstrap909 ());
+    }
+
+    private static MethodHandle INDY_call909;
+    private static MethodHandle INDY_call909 () throws Throwable {
+        if (INDY_call909 != null) return INDY_call909;
+        CallSite cs = (CallSite) MH_bootstrap909 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap909 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper909 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call909 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap909 (Object l, Object n, Object t) throws Throwable { return _mh[ 909 ].invokeExact(l, n, t); }
+
+    // 910
+    private static MethodType MT_bootstrap910 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap910 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap910", MT_bootstrap910 ());
+    }
+
+    private static MethodHandle INDY_call910;
+    private static MethodHandle INDY_call910 () throws Throwable {
+        if (INDY_call910 != null) return INDY_call910;
+        CallSite cs = (CallSite) MH_bootstrap910 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap910 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper910 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call910 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap910 (Object l, Object n, Object t) throws Throwable { return _mh[ 910 ].invokeExact(l, n, t); }
+
+    // 911
+    private static MethodType MT_bootstrap911 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap911 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap911", MT_bootstrap911 ());
+    }
+
+    private static MethodHandle INDY_call911;
+    private static MethodHandle INDY_call911 () throws Throwable {
+        if (INDY_call911 != null) return INDY_call911;
+        CallSite cs = (CallSite) MH_bootstrap911 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap911 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper911 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call911 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap911 (Object l, Object n, Object t) throws Throwable { return _mh[ 911 ].invokeExact(l, n, t); }
+
+    // 912
+    private static MethodType MT_bootstrap912 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap912 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap912", MT_bootstrap912 ());
+    }
+
+    private static MethodHandle INDY_call912;
+    private static MethodHandle INDY_call912 () throws Throwable {
+        if (INDY_call912 != null) return INDY_call912;
+        CallSite cs = (CallSite) MH_bootstrap912 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap912 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper912 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call912 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap912 (Object l, Object n, Object t) throws Throwable { return _mh[ 912 ].invokeExact(l, n, t); }
+
+    // 913
+    private static MethodType MT_bootstrap913 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap913 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap913", MT_bootstrap913 ());
+    }
+
+    private static MethodHandle INDY_call913;
+    private static MethodHandle INDY_call913 () throws Throwable {
+        if (INDY_call913 != null) return INDY_call913;
+        CallSite cs = (CallSite) MH_bootstrap913 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap913 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper913 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call913 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap913 (Object l, Object n, Object t) throws Throwable { return _mh[ 913 ].invokeExact(l, n, t); }
+
+    // 914
+    private static MethodType MT_bootstrap914 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap914 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap914", MT_bootstrap914 ());
+    }
+
+    private static MethodHandle INDY_call914;
+    private static MethodHandle INDY_call914 () throws Throwable {
+        if (INDY_call914 != null) return INDY_call914;
+        CallSite cs = (CallSite) MH_bootstrap914 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap914 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper914 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call914 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap914 (Object l, Object n, Object t) throws Throwable { return _mh[ 914 ].invokeExact(l, n, t); }
+
+    // 915
+    private static MethodType MT_bootstrap915 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap915 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap915", MT_bootstrap915 ());
+    }
+
+    private static MethodHandle INDY_call915;
+    private static MethodHandle INDY_call915 () throws Throwable {
+        if (INDY_call915 != null) return INDY_call915;
+        CallSite cs = (CallSite) MH_bootstrap915 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap915 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper915 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call915 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap915 (Object l, Object n, Object t) throws Throwable { return _mh[ 915 ].invokeExact(l, n, t); }
+
+    // 916
+    private static MethodType MT_bootstrap916 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap916 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap916", MT_bootstrap916 ());
+    }
+
+    private static MethodHandle INDY_call916;
+    private static MethodHandle INDY_call916 () throws Throwable {
+        if (INDY_call916 != null) return INDY_call916;
+        CallSite cs = (CallSite) MH_bootstrap916 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap916 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper916 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call916 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap916 (Object l, Object n, Object t) throws Throwable { return _mh[ 916 ].invokeExact(l, n, t); }
+
+    // 917
+    private static MethodType MT_bootstrap917 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap917 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap917", MT_bootstrap917 ());
+    }
+
+    private static MethodHandle INDY_call917;
+    private static MethodHandle INDY_call917 () throws Throwable {
+        if (INDY_call917 != null) return INDY_call917;
+        CallSite cs = (CallSite) MH_bootstrap917 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap917 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper917 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call917 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap917 (Object l, Object n, Object t) throws Throwable { return _mh[ 917 ].invokeExact(l, n, t); }
+
+    // 918
+    private static MethodType MT_bootstrap918 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap918 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap918", MT_bootstrap918 ());
+    }
+
+    private static MethodHandle INDY_call918;
+    private static MethodHandle INDY_call918 () throws Throwable {
+        if (INDY_call918 != null) return INDY_call918;
+        CallSite cs = (CallSite) MH_bootstrap918 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap918 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper918 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call918 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap918 (Object l, Object n, Object t) throws Throwable { return _mh[ 918 ].invokeExact(l, n, t); }
+
+    // 919
+    private static MethodType MT_bootstrap919 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap919 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap919", MT_bootstrap919 ());
+    }
+
+    private static MethodHandle INDY_call919;
+    private static MethodHandle INDY_call919 () throws Throwable {
+        if (INDY_call919 != null) return INDY_call919;
+        CallSite cs = (CallSite) MH_bootstrap919 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap919 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper919 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call919 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap919 (Object l, Object n, Object t) throws Throwable { return _mh[ 919 ].invokeExact(l, n, t); }
+
+    // 920
+    private static MethodType MT_bootstrap920 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap920 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap920", MT_bootstrap920 ());
+    }
+
+    private static MethodHandle INDY_call920;
+    private static MethodHandle INDY_call920 () throws Throwable {
+        if (INDY_call920 != null) return INDY_call920;
+        CallSite cs = (CallSite) MH_bootstrap920 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap920 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper920 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call920 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap920 (Object l, Object n, Object t) throws Throwable { return _mh[ 920 ].invokeExact(l, n, t); }
+
+    // 921
+    private static MethodType MT_bootstrap921 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap921 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap921", MT_bootstrap921 ());
+    }
+
+    private static MethodHandle INDY_call921;
+    private static MethodHandle INDY_call921 () throws Throwable {
+        if (INDY_call921 != null) return INDY_call921;
+        CallSite cs = (CallSite) MH_bootstrap921 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap921 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper921 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call921 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap921 (Object l, Object n, Object t) throws Throwable { return _mh[ 921 ].invokeExact(l, n, t); }
+
+    // 922
+    private static MethodType MT_bootstrap922 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap922 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap922", MT_bootstrap922 ());
+    }
+
+    private static MethodHandle INDY_call922;
+    private static MethodHandle INDY_call922 () throws Throwable {
+        if (INDY_call922 != null) return INDY_call922;
+        CallSite cs = (CallSite) MH_bootstrap922 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap922 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper922 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call922 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap922 (Object l, Object n, Object t) throws Throwable { return _mh[ 922 ].invokeExact(l, n, t); }
+
+    // 923
+    private static MethodType MT_bootstrap923 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap923 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap923", MT_bootstrap923 ());
+    }
+
+    private static MethodHandle INDY_call923;
+    private static MethodHandle INDY_call923 () throws Throwable {
+        if (INDY_call923 != null) return INDY_call923;
+        CallSite cs = (CallSite) MH_bootstrap923 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap923 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper923 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call923 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap923 (Object l, Object n, Object t) throws Throwable { return _mh[ 923 ].invokeExact(l, n, t); }
+
+    // 924
+    private static MethodType MT_bootstrap924 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap924 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap924", MT_bootstrap924 ());
+    }
+
+    private static MethodHandle INDY_call924;
+    private static MethodHandle INDY_call924 () throws Throwable {
+        if (INDY_call924 != null) return INDY_call924;
+        CallSite cs = (CallSite) MH_bootstrap924 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap924 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper924 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call924 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap924 (Object l, Object n, Object t) throws Throwable { return _mh[ 924 ].invokeExact(l, n, t); }
+
+    // 925
+    private static MethodType MT_bootstrap925 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap925 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap925", MT_bootstrap925 ());
+    }
+
+    private static MethodHandle INDY_call925;
+    private static MethodHandle INDY_call925 () throws Throwable {
+        if (INDY_call925 != null) return INDY_call925;
+        CallSite cs = (CallSite) MH_bootstrap925 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap925 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper925 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call925 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap925 (Object l, Object n, Object t) throws Throwable { return _mh[ 925 ].invokeExact(l, n, t); }
+
+    // 926
+    private static MethodType MT_bootstrap926 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap926 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap926", MT_bootstrap926 ());
+    }
+
+    private static MethodHandle INDY_call926;
+    private static MethodHandle INDY_call926 () throws Throwable {
+        if (INDY_call926 != null) return INDY_call926;
+        CallSite cs = (CallSite) MH_bootstrap926 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap926 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper926 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call926 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap926 (Object l, Object n, Object t) throws Throwable { return _mh[ 926 ].invokeExact(l, n, t); }
+
+    // 927
+    private static MethodType MT_bootstrap927 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap927 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap927", MT_bootstrap927 ());
+    }
+
+    private static MethodHandle INDY_call927;
+    private static MethodHandle INDY_call927 () throws Throwable {
+        if (INDY_call927 != null) return INDY_call927;
+        CallSite cs = (CallSite) MH_bootstrap927 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap927 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper927 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call927 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap927 (Object l, Object n, Object t) throws Throwable { return _mh[ 927 ].invokeExact(l, n, t); }
+
+    // 928
+    private static MethodType MT_bootstrap928 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap928 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap928", MT_bootstrap928 ());
+    }
+
+    private static MethodHandle INDY_call928;
+    private static MethodHandle INDY_call928 () throws Throwable {
+        if (INDY_call928 != null) return INDY_call928;
+        CallSite cs = (CallSite) MH_bootstrap928 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap928 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper928 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call928 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap928 (Object l, Object n, Object t) throws Throwable { return _mh[ 928 ].invokeExact(l, n, t); }
+
+    // 929
+    private static MethodType MT_bootstrap929 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap929 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap929", MT_bootstrap929 ());
+    }
+
+    private static MethodHandle INDY_call929;
+    private static MethodHandle INDY_call929 () throws Throwable {
+        if (INDY_call929 != null) return INDY_call929;
+        CallSite cs = (CallSite) MH_bootstrap929 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap929 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper929 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call929 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap929 (Object l, Object n, Object t) throws Throwable { return _mh[ 929 ].invokeExact(l, n, t); }
+
+    // 930
+    private static MethodType MT_bootstrap930 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap930 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap930", MT_bootstrap930 ());
+    }
+
+    private static MethodHandle INDY_call930;
+    private static MethodHandle INDY_call930 () throws Throwable {
+        if (INDY_call930 != null) return INDY_call930;
+        CallSite cs = (CallSite) MH_bootstrap930 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap930 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper930 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call930 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap930 (Object l, Object n, Object t) throws Throwable { return _mh[ 930 ].invokeExact(l, n, t); }
+
+    // 931
+    private static MethodType MT_bootstrap931 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap931 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap931", MT_bootstrap931 ());
+    }
+
+    private static MethodHandle INDY_call931;
+    private static MethodHandle INDY_call931 () throws Throwable {
+        if (INDY_call931 != null) return INDY_call931;
+        CallSite cs = (CallSite) MH_bootstrap931 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap931 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper931 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call931 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap931 (Object l, Object n, Object t) throws Throwable { return _mh[ 931 ].invokeExact(l, n, t); }
+
+    // 932
+    private static MethodType MT_bootstrap932 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap932 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap932", MT_bootstrap932 ());
+    }
+
+    private static MethodHandle INDY_call932;
+    private static MethodHandle INDY_call932 () throws Throwable {
+        if (INDY_call932 != null) return INDY_call932;
+        CallSite cs = (CallSite) MH_bootstrap932 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap932 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper932 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call932 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap932 (Object l, Object n, Object t) throws Throwable { return _mh[ 932 ].invokeExact(l, n, t); }
+
+    // 933
+    private static MethodType MT_bootstrap933 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap933 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap933", MT_bootstrap933 ());
+    }
+
+    private static MethodHandle INDY_call933;
+    private static MethodHandle INDY_call933 () throws Throwable {
+        if (INDY_call933 != null) return INDY_call933;
+        CallSite cs = (CallSite) MH_bootstrap933 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap933 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper933 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call933 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap933 (Object l, Object n, Object t) throws Throwable { return _mh[ 933 ].invokeExact(l, n, t); }
+
+    // 934
+    private static MethodType MT_bootstrap934 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap934 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap934", MT_bootstrap934 ());
+    }
+
+    private static MethodHandle INDY_call934;
+    private static MethodHandle INDY_call934 () throws Throwable {
+        if (INDY_call934 != null) return INDY_call934;
+        CallSite cs = (CallSite) MH_bootstrap934 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap934 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper934 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call934 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap934 (Object l, Object n, Object t) throws Throwable { return _mh[ 934 ].invokeExact(l, n, t); }
+
+    // 935
+    private static MethodType MT_bootstrap935 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap935 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap935", MT_bootstrap935 ());
+    }
+
+    private static MethodHandle INDY_call935;
+    private static MethodHandle INDY_call935 () throws Throwable {
+        if (INDY_call935 != null) return INDY_call935;
+        CallSite cs = (CallSite) MH_bootstrap935 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap935 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper935 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call935 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap935 (Object l, Object n, Object t) throws Throwable { return _mh[ 935 ].invokeExact(l, n, t); }
+
+    // 936
+    private static MethodType MT_bootstrap936 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap936 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap936", MT_bootstrap936 ());
+    }
+
+    private static MethodHandle INDY_call936;
+    private static MethodHandle INDY_call936 () throws Throwable {
+        if (INDY_call936 != null) return INDY_call936;
+        CallSite cs = (CallSite) MH_bootstrap936 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap936 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper936 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call936 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap936 (Object l, Object n, Object t) throws Throwable { return _mh[ 936 ].invokeExact(l, n, t); }
+
+    // 937
+    private static MethodType MT_bootstrap937 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap937 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap937", MT_bootstrap937 ());
+    }
+
+    private static MethodHandle INDY_call937;
+    private static MethodHandle INDY_call937 () throws Throwable {
+        if (INDY_call937 != null) return INDY_call937;
+        CallSite cs = (CallSite) MH_bootstrap937 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap937 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper937 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call937 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap937 (Object l, Object n, Object t) throws Throwable { return _mh[ 937 ].invokeExact(l, n, t); }
+
+    // 938
+    private static MethodType MT_bootstrap938 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap938 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap938", MT_bootstrap938 ());
+    }
+
+    private static MethodHandle INDY_call938;
+    private static MethodHandle INDY_call938 () throws Throwable {
+        if (INDY_call938 != null) return INDY_call938;
+        CallSite cs = (CallSite) MH_bootstrap938 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap938 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper938 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call938 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap938 (Object l, Object n, Object t) throws Throwable { return _mh[ 938 ].invokeExact(l, n, t); }
+
+    // 939
+    private static MethodType MT_bootstrap939 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap939 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap939", MT_bootstrap939 ());
+    }
+
+    private static MethodHandle INDY_call939;
+    private static MethodHandle INDY_call939 () throws Throwable {
+        if (INDY_call939 != null) return INDY_call939;
+        CallSite cs = (CallSite) MH_bootstrap939 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap939 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper939 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call939 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap939 (Object l, Object n, Object t) throws Throwable { return _mh[ 939 ].invokeExact(l, n, t); }
+
+    // 940
+    private static MethodType MT_bootstrap940 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap940 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap940", MT_bootstrap940 ());
+    }
+
+    private static MethodHandle INDY_call940;
+    private static MethodHandle INDY_call940 () throws Throwable {
+        if (INDY_call940 != null) return INDY_call940;
+        CallSite cs = (CallSite) MH_bootstrap940 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap940 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper940 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call940 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap940 (Object l, Object n, Object t) throws Throwable { return _mh[ 940 ].invokeExact(l, n, t); }
+
+    // 941
+    private static MethodType MT_bootstrap941 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap941 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap941", MT_bootstrap941 ());
+    }
+
+    private static MethodHandle INDY_call941;
+    private static MethodHandle INDY_call941 () throws Throwable {
+        if (INDY_call941 != null) return INDY_call941;
+        CallSite cs = (CallSite) MH_bootstrap941 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap941 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper941 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call941 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap941 (Object l, Object n, Object t) throws Throwable { return _mh[ 941 ].invokeExact(l, n, t); }
+
+    // 942
+    private static MethodType MT_bootstrap942 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap942 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap942", MT_bootstrap942 ());
+    }
+
+    private static MethodHandle INDY_call942;
+    private static MethodHandle INDY_call942 () throws Throwable {
+        if (INDY_call942 != null) return INDY_call942;
+        CallSite cs = (CallSite) MH_bootstrap942 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap942 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper942 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call942 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap942 (Object l, Object n, Object t) throws Throwable { return _mh[ 942 ].invokeExact(l, n, t); }
+
+    // 943
+    private static MethodType MT_bootstrap943 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap943 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap943", MT_bootstrap943 ());
+    }
+
+    private static MethodHandle INDY_call943;
+    private static MethodHandle INDY_call943 () throws Throwable {
+        if (INDY_call943 != null) return INDY_call943;
+        CallSite cs = (CallSite) MH_bootstrap943 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap943 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper943 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call943 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap943 (Object l, Object n, Object t) throws Throwable { return _mh[ 943 ].invokeExact(l, n, t); }
+
+    // 944
+    private static MethodType MT_bootstrap944 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap944 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap944", MT_bootstrap944 ());
+    }
+
+    private static MethodHandle INDY_call944;
+    private static MethodHandle INDY_call944 () throws Throwable {
+        if (INDY_call944 != null) return INDY_call944;
+        CallSite cs = (CallSite) MH_bootstrap944 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap944 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper944 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call944 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap944 (Object l, Object n, Object t) throws Throwable { return _mh[ 944 ].invokeExact(l, n, t); }
+
+    // 945
+    private static MethodType MT_bootstrap945 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap945 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap945", MT_bootstrap945 ());
+    }
+
+    private static MethodHandle INDY_call945;
+    private static MethodHandle INDY_call945 () throws Throwable {
+        if (INDY_call945 != null) return INDY_call945;
+        CallSite cs = (CallSite) MH_bootstrap945 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap945 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper945 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call945 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap945 (Object l, Object n, Object t) throws Throwable { return _mh[ 945 ].invokeExact(l, n, t); }
+
+    // 946
+    private static MethodType MT_bootstrap946 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap946 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap946", MT_bootstrap946 ());
+    }
+
+    private static MethodHandle INDY_call946;
+    private static MethodHandle INDY_call946 () throws Throwable {
+        if (INDY_call946 != null) return INDY_call946;
+        CallSite cs = (CallSite) MH_bootstrap946 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap946 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper946 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call946 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap946 (Object l, Object n, Object t) throws Throwable { return _mh[ 946 ].invokeExact(l, n, t); }
+
+    // 947
+    private static MethodType MT_bootstrap947 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap947 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap947", MT_bootstrap947 ());
+    }
+
+    private static MethodHandle INDY_call947;
+    private static MethodHandle INDY_call947 () throws Throwable {
+        if (INDY_call947 != null) return INDY_call947;
+        CallSite cs = (CallSite) MH_bootstrap947 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap947 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper947 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call947 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap947 (Object l, Object n, Object t) throws Throwable { return _mh[ 947 ].invokeExact(l, n, t); }
+
+    // 948
+    private static MethodType MT_bootstrap948 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap948 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap948", MT_bootstrap948 ());
+    }
+
+    private static MethodHandle INDY_call948;
+    private static MethodHandle INDY_call948 () throws Throwable {
+        if (INDY_call948 != null) return INDY_call948;
+        CallSite cs = (CallSite) MH_bootstrap948 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap948 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper948 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call948 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap948 (Object l, Object n, Object t) throws Throwable { return _mh[ 948 ].invokeExact(l, n, t); }
+
+    // 949
+    private static MethodType MT_bootstrap949 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap949 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap949", MT_bootstrap949 ());
+    }
+
+    private static MethodHandle INDY_call949;
+    private static MethodHandle INDY_call949 () throws Throwable {
+        if (INDY_call949 != null) return INDY_call949;
+        CallSite cs = (CallSite) MH_bootstrap949 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap949 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper949 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call949 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap949 (Object l, Object n, Object t) throws Throwable { return _mh[ 949 ].invokeExact(l, n, t); }
+
+    // 950
+    private static MethodType MT_bootstrap950 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap950 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap950", MT_bootstrap950 ());
+    }
+
+    private static MethodHandle INDY_call950;
+    private static MethodHandle INDY_call950 () throws Throwable {
+        if (INDY_call950 != null) return INDY_call950;
+        CallSite cs = (CallSite) MH_bootstrap950 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap950 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper950 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call950 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap950 (Object l, Object n, Object t) throws Throwable { return _mh[ 950 ].invokeExact(l, n, t); }
+
+    // 951
+    private static MethodType MT_bootstrap951 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap951 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap951", MT_bootstrap951 ());
+    }
+
+    private static MethodHandle INDY_call951;
+    private static MethodHandle INDY_call951 () throws Throwable {
+        if (INDY_call951 != null) return INDY_call951;
+        CallSite cs = (CallSite) MH_bootstrap951 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap951 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper951 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call951 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap951 (Object l, Object n, Object t) throws Throwable { return _mh[ 951 ].invokeExact(l, n, t); }
+
+    // 952
+    private static MethodType MT_bootstrap952 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap952 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap952", MT_bootstrap952 ());
+    }
+
+    private static MethodHandle INDY_call952;
+    private static MethodHandle INDY_call952 () throws Throwable {
+        if (INDY_call952 != null) return INDY_call952;
+        CallSite cs = (CallSite) MH_bootstrap952 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap952 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper952 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call952 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap952 (Object l, Object n, Object t) throws Throwable { return _mh[ 952 ].invokeExact(l, n, t); }
+
+    // 953
+    private static MethodType MT_bootstrap953 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap953 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap953", MT_bootstrap953 ());
+    }
+
+    private static MethodHandle INDY_call953;
+    private static MethodHandle INDY_call953 () throws Throwable {
+        if (INDY_call953 != null) return INDY_call953;
+        CallSite cs = (CallSite) MH_bootstrap953 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap953 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper953 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call953 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap953 (Object l, Object n, Object t) throws Throwable { return _mh[ 953 ].invokeExact(l, n, t); }
+
+    // 954
+    private static MethodType MT_bootstrap954 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap954 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap954", MT_bootstrap954 ());
+    }
+
+    private static MethodHandle INDY_call954;
+    private static MethodHandle INDY_call954 () throws Throwable {
+        if (INDY_call954 != null) return INDY_call954;
+        CallSite cs = (CallSite) MH_bootstrap954 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap954 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper954 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call954 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap954 (Object l, Object n, Object t) throws Throwable { return _mh[ 954 ].invokeExact(l, n, t); }
+
+    // 955
+    private static MethodType MT_bootstrap955 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap955 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap955", MT_bootstrap955 ());
+    }
+
+    private static MethodHandle INDY_call955;
+    private static MethodHandle INDY_call955 () throws Throwable {
+        if (INDY_call955 != null) return INDY_call955;
+        CallSite cs = (CallSite) MH_bootstrap955 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap955 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper955 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call955 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap955 (Object l, Object n, Object t) throws Throwable { return _mh[ 955 ].invokeExact(l, n, t); }
+
+    // 956
+    private static MethodType MT_bootstrap956 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap956 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap956", MT_bootstrap956 ());
+    }
+
+    private static MethodHandle INDY_call956;
+    private static MethodHandle INDY_call956 () throws Throwable {
+        if (INDY_call956 != null) return INDY_call956;
+        CallSite cs = (CallSite) MH_bootstrap956 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap956 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper956 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call956 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap956 (Object l, Object n, Object t) throws Throwable { return _mh[ 956 ].invokeExact(l, n, t); }
+
+    // 957
+    private static MethodType MT_bootstrap957 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap957 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap957", MT_bootstrap957 ());
+    }
+
+    private static MethodHandle INDY_call957;
+    private static MethodHandle INDY_call957 () throws Throwable {
+        if (INDY_call957 != null) return INDY_call957;
+        CallSite cs = (CallSite) MH_bootstrap957 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap957 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper957 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call957 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap957 (Object l, Object n, Object t) throws Throwable { return _mh[ 957 ].invokeExact(l, n, t); }
+
+    // 958
+    private static MethodType MT_bootstrap958 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap958 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap958", MT_bootstrap958 ());
+    }
+
+    private static MethodHandle INDY_call958;
+    private static MethodHandle INDY_call958 () throws Throwable {
+        if (INDY_call958 != null) return INDY_call958;
+        CallSite cs = (CallSite) MH_bootstrap958 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap958 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper958 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call958 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap958 (Object l, Object n, Object t) throws Throwable { return _mh[ 958 ].invokeExact(l, n, t); }
+
+    // 959
+    private static MethodType MT_bootstrap959 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap959 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap959", MT_bootstrap959 ());
+    }
+
+    private static MethodHandle INDY_call959;
+    private static MethodHandle INDY_call959 () throws Throwable {
+        if (INDY_call959 != null) return INDY_call959;
+        CallSite cs = (CallSite) MH_bootstrap959 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap959 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper959 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call959 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap959 (Object l, Object n, Object t) throws Throwable { return _mh[ 959 ].invokeExact(l, n, t); }
+
+    // 960
+    private static MethodType MT_bootstrap960 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap960 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap960", MT_bootstrap960 ());
+    }
+
+    private static MethodHandle INDY_call960;
+    private static MethodHandle INDY_call960 () throws Throwable {
+        if (INDY_call960 != null) return INDY_call960;
+        CallSite cs = (CallSite) MH_bootstrap960 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap960 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper960 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call960 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap960 (Object l, Object n, Object t) throws Throwable { return _mh[ 960 ].invokeExact(l, n, t); }
+
+    // 961
+    private static MethodType MT_bootstrap961 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap961 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap961", MT_bootstrap961 ());
+    }
+
+    private static MethodHandle INDY_call961;
+    private static MethodHandle INDY_call961 () throws Throwable {
+        if (INDY_call961 != null) return INDY_call961;
+        CallSite cs = (CallSite) MH_bootstrap961 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap961 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper961 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call961 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap961 (Object l, Object n, Object t) throws Throwable { return _mh[ 961 ].invokeExact(l, n, t); }
+
+    // 962
+    private static MethodType MT_bootstrap962 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap962 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap962", MT_bootstrap962 ());
+    }
+
+    private static MethodHandle INDY_call962;
+    private static MethodHandle INDY_call962 () throws Throwable {
+        if (INDY_call962 != null) return INDY_call962;
+        CallSite cs = (CallSite) MH_bootstrap962 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap962 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper962 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call962 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap962 (Object l, Object n, Object t) throws Throwable { return _mh[ 962 ].invokeExact(l, n, t); }
+
+    // 963
+    private static MethodType MT_bootstrap963 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap963 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap963", MT_bootstrap963 ());
+    }
+
+    private static MethodHandle INDY_call963;
+    private static MethodHandle INDY_call963 () throws Throwable {
+        if (INDY_call963 != null) return INDY_call963;
+        CallSite cs = (CallSite) MH_bootstrap963 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap963 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper963 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call963 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap963 (Object l, Object n, Object t) throws Throwable { return _mh[ 963 ].invokeExact(l, n, t); }
+
+    // 964
+    private static MethodType MT_bootstrap964 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap964 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap964", MT_bootstrap964 ());
+    }
+
+    private static MethodHandle INDY_call964;
+    private static MethodHandle INDY_call964 () throws Throwable {
+        if (INDY_call964 != null) return INDY_call964;
+        CallSite cs = (CallSite) MH_bootstrap964 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap964 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper964 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call964 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap964 (Object l, Object n, Object t) throws Throwable { return _mh[ 964 ].invokeExact(l, n, t); }
+
+    // 965
+    private static MethodType MT_bootstrap965 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap965 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap965", MT_bootstrap965 ());
+    }
+
+    private static MethodHandle INDY_call965;
+    private static MethodHandle INDY_call965 () throws Throwable {
+        if (INDY_call965 != null) return INDY_call965;
+        CallSite cs = (CallSite) MH_bootstrap965 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap965 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper965 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call965 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap965 (Object l, Object n, Object t) throws Throwable { return _mh[ 965 ].invokeExact(l, n, t); }
+
+    // 966
+    private static MethodType MT_bootstrap966 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap966 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap966", MT_bootstrap966 ());
+    }
+
+    private static MethodHandle INDY_call966;
+    private static MethodHandle INDY_call966 () throws Throwable {
+        if (INDY_call966 != null) return INDY_call966;
+        CallSite cs = (CallSite) MH_bootstrap966 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap966 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper966 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call966 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap966 (Object l, Object n, Object t) throws Throwable { return _mh[ 966 ].invokeExact(l, n, t); }
+
+    // 967
+    private static MethodType MT_bootstrap967 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap967 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap967", MT_bootstrap967 ());
+    }
+
+    private static MethodHandle INDY_call967;
+    private static MethodHandle INDY_call967 () throws Throwable {
+        if (INDY_call967 != null) return INDY_call967;
+        CallSite cs = (CallSite) MH_bootstrap967 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap967 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper967 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call967 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap967 (Object l, Object n, Object t) throws Throwable { return _mh[ 967 ].invokeExact(l, n, t); }
+
+    // 968
+    private static MethodType MT_bootstrap968 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap968 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap968", MT_bootstrap968 ());
+    }
+
+    private static MethodHandle INDY_call968;
+    private static MethodHandle INDY_call968 () throws Throwable {
+        if (INDY_call968 != null) return INDY_call968;
+        CallSite cs = (CallSite) MH_bootstrap968 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap968 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper968 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call968 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap968 (Object l, Object n, Object t) throws Throwable { return _mh[ 968 ].invokeExact(l, n, t); }
+
+    // 969
+    private static MethodType MT_bootstrap969 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap969 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap969", MT_bootstrap969 ());
+    }
+
+    private static MethodHandle INDY_call969;
+    private static MethodHandle INDY_call969 () throws Throwable {
+        if (INDY_call969 != null) return INDY_call969;
+        CallSite cs = (CallSite) MH_bootstrap969 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap969 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper969 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call969 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap969 (Object l, Object n, Object t) throws Throwable { return _mh[ 969 ].invokeExact(l, n, t); }
+
+    // 970
+    private static MethodType MT_bootstrap970 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap970 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap970", MT_bootstrap970 ());
+    }
+
+    private static MethodHandle INDY_call970;
+    private static MethodHandle INDY_call970 () throws Throwable {
+        if (INDY_call970 != null) return INDY_call970;
+        CallSite cs = (CallSite) MH_bootstrap970 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap970 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper970 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call970 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap970 (Object l, Object n, Object t) throws Throwable { return _mh[ 970 ].invokeExact(l, n, t); }
+
+    // 971
+    private static MethodType MT_bootstrap971 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap971 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap971", MT_bootstrap971 ());
+    }
+
+    private static MethodHandle INDY_call971;
+    private static MethodHandle INDY_call971 () throws Throwable {
+        if (INDY_call971 != null) return INDY_call971;
+        CallSite cs = (CallSite) MH_bootstrap971 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap971 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper971 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call971 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap971 (Object l, Object n, Object t) throws Throwable { return _mh[ 971 ].invokeExact(l, n, t); }
+
+    // 972
+    private static MethodType MT_bootstrap972 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap972 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap972", MT_bootstrap972 ());
+    }
+
+    private static MethodHandle INDY_call972;
+    private static MethodHandle INDY_call972 () throws Throwable {
+        if (INDY_call972 != null) return INDY_call972;
+        CallSite cs = (CallSite) MH_bootstrap972 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap972 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper972 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call972 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap972 (Object l, Object n, Object t) throws Throwable { return _mh[ 972 ].invokeExact(l, n, t); }
+
+    // 973
+    private static MethodType MT_bootstrap973 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap973 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap973", MT_bootstrap973 ());
+    }
+
+    private static MethodHandle INDY_call973;
+    private static MethodHandle INDY_call973 () throws Throwable {
+        if (INDY_call973 != null) return INDY_call973;
+        CallSite cs = (CallSite) MH_bootstrap973 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap973 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper973 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call973 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap973 (Object l, Object n, Object t) throws Throwable { return _mh[ 973 ].invokeExact(l, n, t); }
+
+    // 974
+    private static MethodType MT_bootstrap974 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap974 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap974", MT_bootstrap974 ());
+    }
+
+    private static MethodHandle INDY_call974;
+    private static MethodHandle INDY_call974 () throws Throwable {
+        if (INDY_call974 != null) return INDY_call974;
+        CallSite cs = (CallSite) MH_bootstrap974 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap974 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper974 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call974 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap974 (Object l, Object n, Object t) throws Throwable { return _mh[ 974 ].invokeExact(l, n, t); }
+
+    // 975
+    private static MethodType MT_bootstrap975 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap975 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap975", MT_bootstrap975 ());
+    }
+
+    private static MethodHandle INDY_call975;
+    private static MethodHandle INDY_call975 () throws Throwable {
+        if (INDY_call975 != null) return INDY_call975;
+        CallSite cs = (CallSite) MH_bootstrap975 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap975 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper975 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call975 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap975 (Object l, Object n, Object t) throws Throwable { return _mh[ 975 ].invokeExact(l, n, t); }
+
+    // 976
+    private static MethodType MT_bootstrap976 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap976 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap976", MT_bootstrap976 ());
+    }
+
+    private static MethodHandle INDY_call976;
+    private static MethodHandle INDY_call976 () throws Throwable {
+        if (INDY_call976 != null) return INDY_call976;
+        CallSite cs = (CallSite) MH_bootstrap976 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap976 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper976 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call976 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap976 (Object l, Object n, Object t) throws Throwable { return _mh[ 976 ].invokeExact(l, n, t); }
+
+    // 977
+    private static MethodType MT_bootstrap977 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap977 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap977", MT_bootstrap977 ());
+    }
+
+    private static MethodHandle INDY_call977;
+    private static MethodHandle INDY_call977 () throws Throwable {
+        if (INDY_call977 != null) return INDY_call977;
+        CallSite cs = (CallSite) MH_bootstrap977 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap977 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper977 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call977 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap977 (Object l, Object n, Object t) throws Throwable { return _mh[ 977 ].invokeExact(l, n, t); }
+
+    // 978
+    private static MethodType MT_bootstrap978 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap978 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap978", MT_bootstrap978 ());
+    }
+
+    private static MethodHandle INDY_call978;
+    private static MethodHandle INDY_call978 () throws Throwable {
+        if (INDY_call978 != null) return INDY_call978;
+        CallSite cs = (CallSite) MH_bootstrap978 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap978 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper978 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call978 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap978 (Object l, Object n, Object t) throws Throwable { return _mh[ 978 ].invokeExact(l, n, t); }
+
+    // 979
+    private static MethodType MT_bootstrap979 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap979 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap979", MT_bootstrap979 ());
+    }
+
+    private static MethodHandle INDY_call979;
+    private static MethodHandle INDY_call979 () throws Throwable {
+        if (INDY_call979 != null) return INDY_call979;
+        CallSite cs = (CallSite) MH_bootstrap979 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap979 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper979 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call979 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap979 (Object l, Object n, Object t) throws Throwable { return _mh[ 979 ].invokeExact(l, n, t); }
+
+    // 980
+    private static MethodType MT_bootstrap980 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap980 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap980", MT_bootstrap980 ());
+    }
+
+    private static MethodHandle INDY_call980;
+    private static MethodHandle INDY_call980 () throws Throwable {
+        if (INDY_call980 != null) return INDY_call980;
+        CallSite cs = (CallSite) MH_bootstrap980 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap980 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper980 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call980 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap980 (Object l, Object n, Object t) throws Throwable { return _mh[ 980 ].invokeExact(l, n, t); }
+
+    // 981
+    private static MethodType MT_bootstrap981 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap981 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap981", MT_bootstrap981 ());
+    }
+
+    private static MethodHandle INDY_call981;
+    private static MethodHandle INDY_call981 () throws Throwable {
+        if (INDY_call981 != null) return INDY_call981;
+        CallSite cs = (CallSite) MH_bootstrap981 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap981 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper981 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call981 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap981 (Object l, Object n, Object t) throws Throwable { return _mh[ 981 ].invokeExact(l, n, t); }
+
+    // 982
+    private static MethodType MT_bootstrap982 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap982 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap982", MT_bootstrap982 ());
+    }
+
+    private static MethodHandle INDY_call982;
+    private static MethodHandle INDY_call982 () throws Throwable {
+        if (INDY_call982 != null) return INDY_call982;
+        CallSite cs = (CallSite) MH_bootstrap982 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap982 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper982 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call982 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap982 (Object l, Object n, Object t) throws Throwable { return _mh[ 982 ].invokeExact(l, n, t); }
+
+    // 983
+    private static MethodType MT_bootstrap983 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap983 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap983", MT_bootstrap983 ());
+    }
+
+    private static MethodHandle INDY_call983;
+    private static MethodHandle INDY_call983 () throws Throwable {
+        if (INDY_call983 != null) return INDY_call983;
+        CallSite cs = (CallSite) MH_bootstrap983 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap983 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper983 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call983 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap983 (Object l, Object n, Object t) throws Throwable { return _mh[ 983 ].invokeExact(l, n, t); }
+
+    // 984
+    private static MethodType MT_bootstrap984 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap984 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap984", MT_bootstrap984 ());
+    }
+
+    private static MethodHandle INDY_call984;
+    private static MethodHandle INDY_call984 () throws Throwable {
+        if (INDY_call984 != null) return INDY_call984;
+        CallSite cs = (CallSite) MH_bootstrap984 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap984 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper984 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call984 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap984 (Object l, Object n, Object t) throws Throwable { return _mh[ 984 ].invokeExact(l, n, t); }
+
+    // 985
+    private static MethodType MT_bootstrap985 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap985 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap985", MT_bootstrap985 ());
+    }
+
+    private static MethodHandle INDY_call985;
+    private static MethodHandle INDY_call985 () throws Throwable {
+        if (INDY_call985 != null) return INDY_call985;
+        CallSite cs = (CallSite) MH_bootstrap985 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap985 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper985 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call985 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap985 (Object l, Object n, Object t) throws Throwable { return _mh[ 985 ].invokeExact(l, n, t); }
+
+    // 986
+    private static MethodType MT_bootstrap986 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap986 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap986", MT_bootstrap986 ());
+    }
+
+    private static MethodHandle INDY_call986;
+    private static MethodHandle INDY_call986 () throws Throwable {
+        if (INDY_call986 != null) return INDY_call986;
+        CallSite cs = (CallSite) MH_bootstrap986 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap986 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper986 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call986 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap986 (Object l, Object n, Object t) throws Throwable { return _mh[ 986 ].invokeExact(l, n, t); }
+
+    // 987
+    private static MethodType MT_bootstrap987 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap987 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap987", MT_bootstrap987 ());
+    }
+
+    private static MethodHandle INDY_call987;
+    private static MethodHandle INDY_call987 () throws Throwable {
+        if (INDY_call987 != null) return INDY_call987;
+        CallSite cs = (CallSite) MH_bootstrap987 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap987 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper987 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call987 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap987 (Object l, Object n, Object t) throws Throwable { return _mh[ 987 ].invokeExact(l, n, t); }
+
+    // 988
+    private static MethodType MT_bootstrap988 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap988 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap988", MT_bootstrap988 ());
+    }
+
+    private static MethodHandle INDY_call988;
+    private static MethodHandle INDY_call988 () throws Throwable {
+        if (INDY_call988 != null) return INDY_call988;
+        CallSite cs = (CallSite) MH_bootstrap988 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap988 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper988 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call988 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap988 (Object l, Object n, Object t) throws Throwable { return _mh[ 988 ].invokeExact(l, n, t); }
+
+    // 989
+    private static MethodType MT_bootstrap989 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap989 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap989", MT_bootstrap989 ());
+    }
+
+    private static MethodHandle INDY_call989;
+    private static MethodHandle INDY_call989 () throws Throwable {
+        if (INDY_call989 != null) return INDY_call989;
+        CallSite cs = (CallSite) MH_bootstrap989 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap989 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper989 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call989 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap989 (Object l, Object n, Object t) throws Throwable { return _mh[ 989 ].invokeExact(l, n, t); }
+
+    // 990
+    private static MethodType MT_bootstrap990 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap990 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap990", MT_bootstrap990 ());
+    }
+
+    private static MethodHandle INDY_call990;
+    private static MethodHandle INDY_call990 () throws Throwable {
+        if (INDY_call990 != null) return INDY_call990;
+        CallSite cs = (CallSite) MH_bootstrap990 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap990 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper990 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call990 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap990 (Object l, Object n, Object t) throws Throwable { return _mh[ 990 ].invokeExact(l, n, t); }
+
+    // 991
+    private static MethodType MT_bootstrap991 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap991 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap991", MT_bootstrap991 ());
+    }
+
+    private static MethodHandle INDY_call991;
+    private static MethodHandle INDY_call991 () throws Throwable {
+        if (INDY_call991 != null) return INDY_call991;
+        CallSite cs = (CallSite) MH_bootstrap991 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap991 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper991 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call991 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap991 (Object l, Object n, Object t) throws Throwable { return _mh[ 991 ].invokeExact(l, n, t); }
+
+    // 992
+    private static MethodType MT_bootstrap992 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap992 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap992", MT_bootstrap992 ());
+    }
+
+    private static MethodHandle INDY_call992;
+    private static MethodHandle INDY_call992 () throws Throwable {
+        if (INDY_call992 != null) return INDY_call992;
+        CallSite cs = (CallSite) MH_bootstrap992 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap992 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper992 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call992 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap992 (Object l, Object n, Object t) throws Throwable { return _mh[ 992 ].invokeExact(l, n, t); }
+
+    // 993
+    private static MethodType MT_bootstrap993 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap993 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap993", MT_bootstrap993 ());
+    }
+
+    private static MethodHandle INDY_call993;
+    private static MethodHandle INDY_call993 () throws Throwable {
+        if (INDY_call993 != null) return INDY_call993;
+        CallSite cs = (CallSite) MH_bootstrap993 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap993 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper993 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call993 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap993 (Object l, Object n, Object t) throws Throwable { return _mh[ 993 ].invokeExact(l, n, t); }
+
+    // 994
+    private static MethodType MT_bootstrap994 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap994 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap994", MT_bootstrap994 ());
+    }
+
+    private static MethodHandle INDY_call994;
+    private static MethodHandle INDY_call994 () throws Throwable {
+        if (INDY_call994 != null) return INDY_call994;
+        CallSite cs = (CallSite) MH_bootstrap994 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap994 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper994 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call994 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap994 (Object l, Object n, Object t) throws Throwable { return _mh[ 994 ].invokeExact(l, n, t); }
+
+    // 995
+    private static MethodType MT_bootstrap995 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap995 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap995", MT_bootstrap995 ());
+    }
+
+    private static MethodHandle INDY_call995;
+    private static MethodHandle INDY_call995 () throws Throwable {
+        if (INDY_call995 != null) return INDY_call995;
+        CallSite cs = (CallSite) MH_bootstrap995 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap995 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper995 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call995 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap995 (Object l, Object n, Object t) throws Throwable { return _mh[ 995 ].invokeExact(l, n, t); }
+
+    // 996
+    private static MethodType MT_bootstrap996 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap996 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap996", MT_bootstrap996 ());
+    }
+
+    private static MethodHandle INDY_call996;
+    private static MethodHandle INDY_call996 () throws Throwable {
+        if (INDY_call996 != null) return INDY_call996;
+        CallSite cs = (CallSite) MH_bootstrap996 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap996 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper996 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call996 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap996 (Object l, Object n, Object t) throws Throwable { return _mh[ 996 ].invokeExact(l, n, t); }
+
+    // 997
+    private static MethodType MT_bootstrap997 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap997 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap997", MT_bootstrap997 ());
+    }
+
+    private static MethodHandle INDY_call997;
+    private static MethodHandle INDY_call997 () throws Throwable {
+        if (INDY_call997 != null) return INDY_call997;
+        CallSite cs = (CallSite) MH_bootstrap997 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap997 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper997 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call997 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap997 (Object l, Object n, Object t) throws Throwable { return _mh[ 997 ].invokeExact(l, n, t); }
+
+    // 998
+    private static MethodType MT_bootstrap998 () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle MH_bootstrap998 () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap998", MT_bootstrap998 ());
+    }
+
+    private static MethodHandle INDY_call998;
+    private static MethodHandle INDY_call998 () throws Throwable {
+        if (INDY_call998 != null) return INDY_call998;
+        CallSite cs = (CallSite) MH_bootstrap998 ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", MT_bootstrap998 ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object indyWrapper998 (Object o1, Object o2, Object o3) throws Throwable { return INDY_call998 ().invokeExact(o1, o2, o3); }
+
+    static Object bootstrap998 (Object l, Object n, Object t) throws Throwable { return _mh[ 998 ].invokeExact(l, n, t); }
+
+
+    // End of BSM+indy pairs
+
+    public boolean run() throws Throwable {
+
+        if ( ! _threadMXBean.isSynchronizerUsageSupported() ) {
+            Env.getLog().complain("Platform does not detect deadlocks in synchronizers. Please exclude this test on this platform.");
+            return false;
+        }
+
+        MethodHandle bsmt = MethodHandles.lookup().findStatic(
+                getClass(), "bsmt", MethodType.methodType(Object.class, int.class, Object.class, Object.class, Object.class));
+
+        for ( int i = 0; i < THREAD_NUM; i++ )
+            _mh[i] = MethodHandles.insertArguments(bsmt, 0, i);
+
+        for ( int i = 0; i < THREAD_NUM; i++ )
+            _locks[i] = new ReentrantLock();
+
+        Stresser stresser = new Stresser(Env.getArgParser().getArguments());
+        stresser.start(ITERATIONS);
+        try {
+            _iteration = 0;
+            while ( stresser.iteration() ) {
+                if  ( ! test() ) {
+                    return false;
+                }
+                _iteration++;
+            }
+        } finally {
+            stresser.finish();
+        }
+
+        return true;
+    }
+
+    boolean test() throws Throwable {
+        Env.traceNormal("Starting test...");
+
+        for ( int i = 0; i < THREAD_NUM; i++ ) {
+            if ( _locks[i].isLocked() ) {
+                Env.getLog().complain("Lock " + i + " is still locked!");
+                _testFailed = true;
+            }
+        }
+
+        if ( _testFailed )
+            throw new Exception("Some locks are still locked");
+
+        _threadRaceStartBarrier = new CyclicBarrier(THREAD_NUM + 1);
+        _testDone = false;
+        _testFailed = false;
+
+        for ( int i = 0; i < THREAD_NUM; i++ )
+            (_threads[i] = new DeadlockedThread(i)).start();
+
+        try {
+            _threadRaceStartBarrier.await();
+            Env.traceVerbose("Start race...");
+
+            //
+            // Wait for the deadlock and detect it using ThreadMXBean
+            //
+
+            boolean resultsReady = false;
+            for ( int i = 0; i < 10 && ! resultsReady && ! _testFailed; i++ ) {
+                Env.traceNormal("Waiting for threads to lock up...");
+                Thread.sleep(100);
+
+                resultsReady = true;
+                for ( int t = 0; t < THREAD_NUM; t++ ) {
+                    if ( _iteration == 0 && t % 3 != 2 && ! _locks[t].hasQueuedThreads() ) {
+                        Env.traceVerbose("Lock " + t + ": no waiters");
+                        resultsReady = false;
+                    } else {
+                        Env.traceVerbose("Lock " + t + ": has waiters");
+                    }
+                }
+            }
+
+            if ( ! resultsReady )
+                Env.traceImportant("Warning: threads are still not deadlocked?");
+
+            long[] deadlockedThreads = _threadMXBean.findDeadlockedThreads();
+            if ( deadlockedThreads == null ) {
+                Env.complain("Found no deadlocked threads. Expected to find " + THREAD_NUM);
+                return false;
+            } else if ( deadlockedThreads.length != THREAD_NUM ) {
+                Env.complain("Found " + deadlockedThreads.length + " deadlocked threads. Expected to find " + THREAD_NUM);
+                return false;
+            } else {
+                Env.traceNormal("Found " + deadlockedThreads.length + " deadlocked threads as expected");
+                return ! _testFailed;
+            }
+        } finally {
+            _testDone = true;
+
+            _threads[0].interrupt();
+
+            for ( int i = 0; i < THREAD_NUM; i++ ) {
+                _threads[i].join(1000);
+                if ( _threads[i].isAlive() )
+                    Env.getLog().complain("Thread " + _threads[i].getName() + " is still alive");
+            }
+
+            MutableCallSite.syncAll(_cs);
+        }
+    }
+
+    static class DeadlockedThread extends Thread {
+        int _n;
+        boolean _lockedCurrent = false;
+        boolean _lockedNext = false;
+
+        public DeadlockedThread(int n) {
+            super();
+            setDaemon(true);
+            _n = n;
+        }
+
+        public void run() {
+            try {
+                Method m = INDIFY_Test.class.getDeclaredMethod("indyWrapper" + _n, Object.class, Object.class, Object.class);
+                m.invoke(null, new Object(), new Object(), _n);
+            } catch ( Throwable t ) {
+                Env.getLog().complain("Exception in thread " + getName());
+                t.printStackTrace(Env.getLog().getOutStream());
+                _testFailed = true;
+            }
+        }
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/INDIFY_Test.jmpp	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,354 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#
+# int THREADS = 999;
+# if ( THREADS % 3 != 0 ) throw new RuntimeException("THREADS should be a multiple of 3!");
+#
+package vm.mlvm.mixed.stress.java.findDeadlock;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.invoke.MutableCallSite;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+import java.lang.reflect.Method;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.locks.ReentrantLock;
+
+import nsk.share.test.Stresser;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+
+public class INDIFY_Test extends MlvmTest {
+
+    public static final int THREAD_NUM = @THREADS;
+    public static final int ITERATIONS = 1000;
+
+    static ThreadMXBean _threadMXBean = ManagementFactory.getThreadMXBean();
+
+    static Thread[] _threads = new Thread[THREAD_NUM];
+    static ReentrantLock[] _locks = new ReentrantLock[THREAD_NUM];
+    static MethodHandle[] _mh = new MethodHandle[THREAD_NUM];
+    static MutableCallSite[] _cs = new MutableCallSite[THREAD_NUM];
+
+    static CyclicBarrier _threadRaceStartBarrier;
+    static volatile boolean _testFailed;
+    static volatile boolean _testDone;
+    static volatile int _iteration;
+
+    private static int nextLock(int n) { return (n + 1) % THREAD_NUM; }
+
+    private static boolean lock(String place, int n, boolean lockInterruptible) throws Throwable {
+        boolean locked = false;
+        place =  Thread.currentThread().getName() + ": " + place;
+        if ( ! lockInterruptible ) {
+            Env.traceVerbose(place + ": Locking " + n);
+            _locks[n].lock();
+            locked = true;
+        } else {
+            try {
+                Env.traceVerbose(place + ": Locking interruptibly " + n);
+                _locks[n].lockInterruptibly();
+                locked = true;
+
+                if ( ! _testDone )
+                    throw new Exception(place + ": LOCKED " + n);
+                else
+                    Env.traceVerbose(place + ": LOCKED " + n);
+
+            } catch ( InterruptedException swallow ) {
+                Env.traceVerbose(place + ": interrupted while locking " + n);
+            }
+        }
+
+        return locked;
+    }
+
+    private static boolean unlock(String place, int n) throws Throwable {
+        place =  Thread.currentThread().getName() + ": " + place;
+        Env.traceVerbose(place + ": Unlocking " + n);
+        _locks[n].unlock();
+        Env.traceVerbose(place + ": UNLOCKED " + n);
+        return false;
+    }
+
+    static Object bsmt(int lockNum, Object l, Object n, Object m) throws Throwable {
+        DeadlockedThread thread = (DeadlockedThread) Thread.currentThread();
+
+        if ( l instanceof MethodHandles.Lookup ) {
+            // Method is used as BSM
+            Env.traceVerbose(thread.getName() + ": Entered BSM. Lock=" + lockNum);
+
+            if ( _iteration > 0 )
+                throw new Exception("BSM called twice!");
+
+            switch ( lockNum % 3 ) {
+            case 0:
+                thread._lockedCurrent = lock("BSM", lockNum, false);
+                _threadRaceStartBarrier.await();
+                thread._lockedNext = lock("BSM", nextLock(lockNum), true);
+                break;
+
+            case 1:
+                thread._lockedCurrent = lock("BSM", lockNum, false);
+                break;
+
+            case 2:
+                // Do everything in target method
+                break;
+            }
+
+            return (_cs[lockNum] = new MutableCallSite(_mh[lockNum]));
+
+        } else {
+            // Method is used as target
+            Env.traceVerbose(thread.getName() + ": Entered target method. Lock=" + lockNum);
+
+            try {
+                if ( _iteration > 0 ) {
+
+                    switch ( lockNum % 3 ) {
+                    case 0:
+                        thread._lockedCurrent = lock("Target", lockNum, false);
+                        _threadRaceStartBarrier.await();
+                        thread._lockedNext = lock("Target", nextLock(lockNum), true);
+                        break;
+
+                    case 1:
+                        thread._lockedCurrent = lock("Target", lockNum, false);
+                        _threadRaceStartBarrier.await();
+                        Env.traceVerbose(thread.getName() + ": Entering synchronize ( " + lockNum + " )");
+                        synchronized ( _locks[nextLock(lockNum)] ) {
+                        }
+                        Env.traceVerbose(thread.getName() + ": Exited synchronize ( " + lockNum + " )");
+                        break;
+
+                    case 2:
+                        Env.traceVerbose(thread.getName() + ": Entering synchronize ( " + lockNum + " )");
+                        synchronized ( _locks[lockNum] ) {
+                            _threadRaceStartBarrier.await();
+                            thread._lockedNext = lock("Target", nextLock(lockNum), true);
+                            thread._lockedNext = unlock("Target", nextLock(lockNum));
+                        }
+                        Env.traceVerbose(thread.getName() + ": Exited synchronize ( " + lockNum + " )");
+                        break;
+                    }
+
+                } else {
+                    switch ( lockNum % 3 ) {
+                    case 0:
+                        // Everything is done in BSM
+                        break;
+
+                    case 1:
+                        _threadRaceStartBarrier.await();
+                        thread._lockedNext = lock("Target", nextLock(lockNum), true);
+                        break;
+
+                    case 2:
+                        thread._lockedCurrent = lock("Target", lockNum, false);
+                        _threadRaceStartBarrier.await();
+                        thread._lockedNext = lock("Target", nextLock(lockNum), true);
+                        break;
+                    }
+
+                }
+
+                return null;
+            } finally {
+                if ( thread._lockedNext )
+                    thread._lockedNext = unlock("Target", nextLock(lockNum));
+                if ( thread._lockedCurrent )
+                    thread._lockedCurrent = unlock("Target", lockNum);
+            }
+        }
+    }
+
+    // BSM + Indy pairs
+#
+# for (int i = 0; i < THREADS; i++ ) {
+#     String MT_bootstrap = "MT_bootstrap" + i;
+#     String MH_bootstrap = "MH_bootstrap" + i;
+#     String INDY_call = "INDY_call" + i;
+#     String bootstrap = "bootstrap" + i;
+#     String qBootstrap = "\"bootstrap" + i + "\"";
+#     String indyWrapper = "indyWrapper" + i;
+#
+    // @i
+    private static MethodType @MT_bootstrap () { return MethodType.methodType(Object.class, Object.class, Object.class, Object.class); }
+
+    private static MethodHandle @MH_bootstrap () throws Exception {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, @qBootstrap, @MT_bootstrap ());
+    }
+
+    private static MethodHandle @INDY_call;
+    private static MethodHandle @INDY_call () throws Throwable {
+        if (@INDY_call != null) return @INDY_call;
+        CallSite cs = (CallSite) @MH_bootstrap ().invokeWithArguments(MethodHandles.lookup(), "gimmeTarget", @MT_bootstrap ());
+        return cs.dynamicInvoker();
+    }
+
+    static Object @indyWrapper (Object o1, Object o2, Object o3) throws Throwable { return @INDY_call ().invokeExact(o1, o2, o3); }
+
+    static Object @bootstrap (Object l, Object n, Object t) throws Throwable { return _mh[ @i ].invokeExact(l, n, t); }
+
+#
+# }
+#
+
+    // End of BSM+indy pairs
+
+    public boolean run() throws Throwable {
+
+        if ( ! _threadMXBean.isSynchronizerUsageSupported() ) {
+            Env.getLog().complain("Platform does not detect deadlocks in synchronizers. Please exclude this test on this platform.");
+            return false;
+        }
+
+        MethodHandle bsmt = MethodHandles.lookup().findStatic(
+                getClass(), "bsmt", MethodType.methodType(Object.class, int.class, Object.class, Object.class, Object.class));
+
+        for ( int i = 0; i < THREAD_NUM; i++ )
+            _mh[i] = MethodHandles.insertArguments(bsmt, 0, i);
+
+        for ( int i = 0; i < THREAD_NUM; i++ )
+            _locks[i] = new ReentrantLock();
+
+        Stresser stresser = new Stresser(Env.getArgParser().getArguments());
+        stresser.start(ITERATIONS);
+        try {
+            _iteration = 0;
+            while ( stresser.iteration() ) {
+                if  ( ! test() ) {
+                    return false;
+                }
+                _iteration++;
+            }
+        } finally {
+            stresser.finish();
+        }
+
+        return true;
+    }
+
+    boolean test() throws Throwable {
+        Env.traceNormal("Starting test...");
+
+        for ( int i = 0; i < THREAD_NUM; i++ ) {
+            if ( _locks[i].isLocked() ) {
+                Env.getLog().complain("Lock " + i + " is still locked!");
+                _testFailed = true;
+            }
+        }
+
+        if ( _testFailed )
+            throw new Exception("Some locks are still locked");
+
+        _threadRaceStartBarrier = new CyclicBarrier(THREAD_NUM + 1);
+        _testDone = false;
+        _testFailed = false;
+
+        for ( int i = 0; i < THREAD_NUM; i++ )
+            (_threads[i] = new DeadlockedThread(i)).start();
+
+        try {
+            _threadRaceStartBarrier.await();
+            Env.traceVerbose("Start race...");
+
+            //
+            // Wait for the deadlock and detect it using ThreadMXBean
+            //
+
+            boolean resultsReady = false;
+            for ( int i = 0; i < 10 && ! resultsReady && ! _testFailed; i++ ) {
+                Env.traceNormal("Waiting for threads to lock up...");
+                Thread.sleep(100);
+
+                resultsReady = true;
+                for ( int t = 0; t < THREAD_NUM; t++ ) {
+                    if ( _iteration == 0 && t % 3 != 2 && ! _locks[t].hasQueuedThreads() ) {
+                        Env.traceVerbose("Lock " + t + ": no waiters");
+                        resultsReady = false;
+                    } else {
+                        Env.traceVerbose("Lock " + t + ": has waiters");
+                    }
+                }
+            }
+
+            if ( ! resultsReady )
+                Env.traceImportant("Warning: threads are still not deadlocked?");
+
+            long[] deadlockedThreads = _threadMXBean.findDeadlockedThreads();
+            if ( deadlockedThreads == null ) {
+                Env.complain("Found no deadlocked threads. Expected to find " + THREAD_NUM);
+                return false;
+            } else if ( deadlockedThreads.length != THREAD_NUM ) {
+                Env.complain("Found " + deadlockedThreads.length + " deadlocked threads. Expected to find " + THREAD_NUM);
+                return false;
+            } else {
+                Env.traceNormal("Found " + deadlockedThreads.length + " deadlocked threads as expected");
+                return ! _testFailed;
+            }
+        } finally {
+            _testDone = true;
+
+            _threads[0].interrupt();
+
+            for ( int i = 0; i < THREAD_NUM; i++ ) {
+                _threads[i].join(1000);
+                if ( _threads[i].isAlive() )
+                    Env.getLog().complain("Thread " + _threads[i].getName() + " is still alive");
+            }
+
+            MutableCallSite.syncAll(_cs);
+        }
+    }
+
+    static class DeadlockedThread extends Thread {
+        int _n;
+        boolean _lockedCurrent = false;
+        boolean _lockedNext = false;
+
+        public DeadlockedThread(int n) {
+            super();
+            setDaemon(true);
+            _n = n;
+        }
+
+        public void run() {
+            try {
+                Method m = INDIFY_Test.class.getDeclaredMethod("indyWrapper" + _n, Object.class, Object.class, Object.class);
+                m.invoke(null, new Object(), new Object(), _n);
+            } catch ( Throwable t ) {
+                Env.getLog().complain("Exception in thread " + getName());
+                t.printStackTrace(Env.getLog().getOutStream());
+                _testFailed = true;
+            }
+        }
+    }
+
+    public static void main(String[] args) { MlvmTest.launch(args); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/java/findDeadlock/TestDescription.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ *
+ * @summary converted from VM Testbase vm/mlvm/mixed/stress/java/findDeadlock.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine, monitoring]
+ * VM Testbase comments: 8055376
+ * VM Testbase readme:
+ * DESCRIPTION
+ *    The test does the following in a loop:
+ *    1. Enters a deadlock involving methodhandles and invokedynamic target and bootstrap methods
+ *       (deadlock is created using both java.util.concurrency.lock.ReentrantLock and
+ *       synchronized() Java syntax)
+ *    2. Finds that deadlock using ThreadMXBean
+ *    3. Unlocks one thread to let others go
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.mixed.stress.java.findDeadlock.INDIFY_Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.mixed.stress.java.findDeadlock.INDIFY_Test
+ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/INDIFY_Test.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,444 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @bug 6969574
+ *
+ * @summary converted from VM Testbase vm/mlvm/mixed/stress/regression/b6969574.
+ * VM Testbase keywords: [feature_mlvm, nonconcurrent, quarantine]
+ * VM Testbase comments: 8079650
+ *
+ * @library /vmTestbase
+ *          /test/lib
+ * @run driver jdk.test.lib.FileInstaller . .
+ *
+ * @comment build test class and indify classes
+ * @build vm.mlvm.mixed.stress.regression.b6969574.INDIFY_Test
+ * @run driver vm.mlvm.share.IndifiedClassesBuilder
+ *
+ * @run main/othervm vm.mlvm.mixed.stress.regression.b6969574.INDIFY_Test
+ */
+
+package vm.mlvm.mixed.stress.regression.b6969574;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.reflect.Method;
+import java.util.LinkedList;
+
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.share.options.Option;
+
+/**
+ * Test for CR 6969574: Verify that MethodHandles is faster than reflection and comparable
+ * in order of magnitude to direct calls.
+ * The test is supposed to run in -Xcomp/-Xmixed modes.
+ * It can fail in -Xint.
+
+ */
+
+public class INDIFY_Test extends MlvmTest {
+
+    @Option(name="warmups", default_value="5", description="Number of warm-up cycles")
+    private int warmups;
+
+    @Option(name="measurements", default_value="10", description="Number of test run cycles")
+    private int measurements;
+
+    @Option(name="iterations", default_value="1000000", description="Number iterations per test run")
+    private int iterations;
+
+    @Option(name="micro.iterations", default_value="5", description="Number micro-iterations per iteration")
+    private int microIterations;
+
+    private static final int MICRO_TO_NANO = 1000000;
+
+    private static final String TESTEE_ARG2 = "abc";
+    private static final long TESTEE_ARG3 = 123;
+
+    //
+    // Test method and its stuff
+    //
+    private static int sMicroIterations;
+
+    private static class TestData {
+        int i;
+    }
+
+    private static final String TESTEE_METHOD_NAME = "testee";
+
+    static long testee;
+    /**
+     * A testee method. Declared public due to Reflection API requirements.
+     * Not intended for external use.
+     */
+    public static void testee(TestData d, String y, long x) {
+        for (int i = 0; i < INDIFY_Test.sMicroIterations; i++) {
+            testee /= 1 + (d.i | 1);
+        }
+    }
+
+    //
+    // Indify stubs for invokedynamic
+    //
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(Object.class, Object.class, Object.class, Object.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(INDIFY_Test.class, "bootstrap", MT_bootstrap());
+    }
+
+    private static MethodType MT_target() {
+        return MethodType.methodType(void.class, TestData.class, String.class, long.class);
+    }
+
+    private static MethodHandle INDY_call;
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null) {
+            return INDY_call;
+        }
+
+        return ((CallSite) MH_bootstrap().invokeWithArguments(MethodHandles.lookup(), "hello", MT_target())).dynamicInvoker();
+    }
+
+    private static Object bootstrap(Object l, Object n, Object t) throws Throwable {
+        trace("BSM called");
+        return new ConstantCallSite(MethodHandles.lookup().findStatic(INDIFY_Test.class, TESTEE_METHOD_NAME, MT_target()));
+    }
+
+    // The function below contains invokedynamic instruction after processing
+    // with Indify
+    private static void indyWrapper(TestData d) throws Throwable {
+        INDY_call().invokeExact(d, TESTEE_ARG2, TESTEE_ARG3);
+    }
+
+    //
+    // Benchmarking infrastructure
+    //
+    private abstract static class T {
+        public abstract void run() throws Throwable;
+    }
+
+    private static class Measurement {
+        Benchmark benchmark;
+        long time;
+        long iterations;
+        double timePerIteration;
+
+        Measurement(Benchmark b, long t, long iter) {
+            benchmark = b;
+            time = t;
+            iterations = iter;
+            timePerIteration = (double) time / iterations;
+        }
+
+        void report(Measurement compareToThis) {
+            String line = String.format("%40s: %7.1f ns", benchmark.name, timePerIteration * MICRO_TO_NANO);
+
+            if (compareToThis != null && compareToThis != this) {
+                double ratio = (double) timePerIteration / compareToThis.timePerIteration;
+                String er = "slower";
+
+                if (ratio < 1) {
+                    er = "FASTER";
+                    ratio = 1 / ratio;
+                }
+
+                line += String.format(" // %.1f times %s than %s", ratio, er, compareToThis.benchmark.name);
+            }
+
+            print(line);
+        }
+    }
+
+    private static class Result {
+        Benchmark benchmark;
+        double mean;
+        double stdDev;
+
+        public Result(Benchmark b, double mean, double stdDev) {
+            benchmark = b;
+            this.mean = mean;
+            this.stdDev = stdDev;
+        }
+
+        public void report(Result compareToThis) {
+            String line = String.format(
+                    "%40s: %7.1f ns (stddev: %5.1f = %2d%%)",
+                    benchmark.name,
+                    mean * MICRO_TO_NANO,
+                    stdDev * MICRO_TO_NANO,
+                    (int) (100 * stdDev / mean));
+
+            if (compareToThis != null && compareToThis != this) {
+                double ratio = mean / compareToThis.mean;
+                String er = "slower";
+
+                if (ratio < 1) {
+                    er = "FASTER";
+                    ratio = 1 / ratio;
+                }
+
+                line += String.format(" // %.1f times %s than %s", ratio, er, compareToThis.benchmark.name);
+            }
+
+            print(line);
+        }
+
+        public static Result calculate(Measurement[] measurements, Result substractThis) {
+            if (measurements.length == 0) {
+                throw new IllegalArgumentException("No measurements!");
+            }
+
+            double meanToSubstract = 0;
+            if (substractThis != null) {
+                meanToSubstract = substractThis.mean;
+            }
+
+            long timeSum = 0;
+            long iterationsSum = 0;
+            for (Measurement m : measurements) {
+                timeSum += m.time;
+                iterationsSum += m.iterations;
+            }
+
+            double mean = (double) timeSum / iterationsSum - meanToSubstract;
+
+            double stdDev = 0;
+            for (Measurement m : measurements) {
+                double result = (double) m.time / m.iterations - meanToSubstract;
+                stdDev += Math.pow(result - mean, 2);
+            }
+            stdDev = Math.sqrt(stdDev / measurements.length);
+
+            return new Result(measurements[0].benchmark, mean, stdDev);
+        }
+
+        public String getMeanStr() {
+            return String.format("%.1f ns", mean * MICRO_TO_NANO);
+        }
+
+        public Benchmark getBenchmark() {
+            return benchmark;
+        }
+    }
+
+    private static class Benchmark {
+        String name;
+        T runnable;
+        LinkedList<Measurement> runResults = new LinkedList<Measurement>();
+
+        public Benchmark(String name, T runnable) {
+            this.name = name;
+            this.runnable = runnable;
+        }
+
+        public Measurement run(int iterations, boolean warmingUp) throws Throwable {
+            long start = System.currentTimeMillis();
+
+            for (int i = iterations; i > 0; --i) {
+                runnable.run();
+            }
+
+            long duration = System.currentTimeMillis() - start;
+
+            Measurement measurement = new Measurement(this, duration, iterations);
+
+            if (!warmingUp) {
+                runResults.add(measurement);
+            }
+
+            return measurement;
+        }
+
+        public void shortWarmup() throws Throwable {
+            runnable.run();
+        }
+
+        public String getName() {
+            return name;
+        }
+    }
+
+    private static double relativeOrder(double value, double base) {
+        return Math.log10(Math.abs(value - base) / base);
+    }
+
+    private void verifyTimeOrder(Result value, Result base) {
+        double timeOrder = relativeOrder(value.mean, base.mean);
+
+        if (timeOrder > 1) {
+            markTestFailed(value.getBenchmark().getName() + " invocation time order ("
+                    + value.getMeanStr()
+                    + ") is greater than of " + base.getBenchmark().getName() + "("
+                    + base.getMeanStr() + ")!");
+        }
+
+        print(value.getBenchmark().getName()
+            + " <= "
+            + base.getBenchmark().getName()
+            + ": Good.");
+    }
+
+    // The numbers below are array indexes + size of array (the last constant).
+    // They should be consecutive, starting with 0
+    private final static int DIRECT_CALL = 0;
+    private final static int REFLECTION_CALL = 1;
+    private final static int INVOKE_EXACT = 2;
+    private final static int INVOKE = 3;
+    private final static int INVOKE_WITHARG = 4;
+    private final static int INVOKE_WITHARG_TYPECONV = 5;
+    private final static int INDY = 6;
+    private final static int BENCHMARK_COUNT = 7;
+
+    //
+    // Test body
+    //
+    @Override
+    public boolean run() throws Throwable {
+        sMicroIterations = microIterations;
+
+        final MethodHandle mhTestee = MethodHandles.lookup().findStatic(INDIFY_Test.class, TESTEE_METHOD_NAME, MT_target());
+        final Method refTestee = getClass().getMethod(TESTEE_METHOD_NAME, new Class<?>[] { TestData.class, String.class, long.class });
+
+        final TestData testData = new TestData();
+
+        final Benchmark[] benchmarks = new Benchmark[BENCHMARK_COUNT];
+
+        benchmarks[DIRECT_CALL] = new Benchmark("Direct call", new T() {
+                    public void run() throws Throwable {
+                        testee(testData, TESTEE_ARG2, TESTEE_ARG3);
+                    }
+                });
+
+        benchmarks[REFLECTION_CALL] =  new Benchmark("Reflection API Method.invoke()", new T() {
+                    public void run() throws Throwable {
+                        refTestee.invoke(null, testData, TESTEE_ARG2, TESTEE_ARG3);
+                    }
+                });
+
+        benchmarks[INVOKE_EXACT] = new Benchmark("MH.invokeExact()", new T() {
+                    public void run() throws Throwable {
+                        mhTestee.invokeExact(testData, TESTEE_ARG2, TESTEE_ARG3);
+                    }
+                });
+
+        benchmarks[INVOKE] = new Benchmark("MH.invoke()", new T() {
+                    public void run() throws Throwable {
+                        mhTestee.invokeExact(testData, TESTEE_ARG2, TESTEE_ARG3);
+                    }
+                });
+
+        benchmarks[INVOKE_WITHARG] = new Benchmark("MH.invokeWithArguments(), exact types", new T() {
+                    public void run() throws Throwable {
+                        mhTestee.invokeWithArguments(testData, TESTEE_ARG2, TESTEE_ARG3);
+                    }
+                });
+
+        benchmarks[INVOKE_WITHARG_TYPECONV] = new Benchmark("MH.invokeWithArguments() + type conv.", new T() {
+                    public void run() throws Throwable {
+                        mhTestee.invokeWithArguments((Object) testData, null, (Short) Short.MAX_VALUE);
+                    }
+                });
+
+        benchmarks[INDY] = new Benchmark("invokedynamic instruction", new T() {
+                    public void run() throws Throwable {
+                        indyWrapper(testData);
+                    }
+                });
+
+        for (int w = 0; w < warmups; w++) {
+            trace("\n======== Warming up, iteration #" + w);
+
+            for (int i = iterations; i > 0; i--) {
+                for (int r = 0; r < benchmarks.length; r++)
+                    benchmarks[r].shortWarmup();
+            }
+        }
+
+        final int compareToIdx = REFLECTION_CALL;
+        for (int i = 0; i < measurements; i++) {
+            trace("\n======== Measuring, iteration #" + i);
+
+            for (int r = 0; r < benchmarks.length; r++) {
+                benchmarks[r].run(iterations, false).report(
+                        r > compareToIdx ? benchmarks[compareToIdx].runResults.getLast() : null);
+            }
+        }
+
+        final Result[] results = new Result[benchmarks.length];
+
+        print("\n======== Results (absolute)" + "; warmups: " + warmups
+                + "; measurements: " + measurements + "; iterations/run: " + iterations
+                + "; micro iterations: " + microIterations);
+
+        for (int r = 0; r < benchmarks.length; r++) {
+            results[r] = Result.calculate(benchmarks[r].runResults.toArray(new Measurement[0]), null);
+        }
+
+        for (int r = 0; r < benchmarks.length; r++) {
+            results[r].report(r != compareToIdx ? results[compareToIdx] : null);
+        }
+
+        print("\n======== Conclusions");
+
+        // TODO: exclude GC time, compilation time (optionally) from measurements
+
+        print("Comparing invocation time orders");
+        verifyTimeOrder(results[REFLECTION_CALL],         results[INVOKE_EXACT]);
+        verifyTimeOrder(results[INVOKE_EXACT],            results[DIRECT_CALL]);
+        verifyTimeOrder(results[INVOKE],                  results[DIRECT_CALL]);
+        verifyTimeOrder(results[INVOKE_WITHARG],          results[INVOKE_EXACT]);
+        verifyTimeOrder(results[INVOKE_WITHARG_TYPECONV], results[INVOKE_EXACT]);
+        verifyTimeOrder(results[INVOKE_EXACT],            results[INDY]);
+
+        return true;
+    }
+
+    // Below are routines for converting this test to a standalone one
+    // This is useful if you want to run the test with JDK7 b103 release
+    // where the regression can be seen
+    static void print(String s) {
+        Env.traceImportant(s);
+    }
+
+    static void trace(String s) {
+        Env.traceNormal(s);
+    }
+
+    //boolean testFailed;
+    //static void markTestFailed(String reason) {
+    //    testFailed = true;
+    //}
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/mixed/stress/regression/b6969574/TEST.properties	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+exclusiveAccess.dirs=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/patches/java.base/java/lang/invoke/NewInvokeSpecialCallSite.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.lang.invoke;
+
+/**
+ * This is a CallSite, which constructor can be used as bootstrap method (via REF_newInvokeSpecial reference kind).
+ *
+ * This call site always calls MethodHandle set with {@link #setMH(MethodHandle)} method (no lookup by method name/type is performed!)
+ * <p>Since we can't extend the java.lang.invoke.CallSite from package other than java.lang.invoke, we use system package name
+ * for this class.
+ */
+public final class NewInvokeSpecialCallSite extends CallSite {
+
+    private static MethodHandle mh;
+
+    /**
+     * Sets method handle, which will be used for CallSite target
+     */
+    public static void setMH(MethodHandle newMH) {
+        mh = newMH;
+    }
+
+    /**
+     * Constructs a CallSite. This constructor has special signature, which can be used for bootstrap method target
+     * of REF_newInvokeSpecial reference kind.
+     * @param lookup Ignored.
+     * @param name Ignored.
+     * @param type Ignored.
+     */
+    public NewInvokeSpecialCallSite(MethodHandles.Lookup lookup, String name, MethodType type) {
+        super(mh);
+    }
+
+    /**
+     * This method is no-op. Use {@link #setMH(MethodHandle)} for setting the target
+     */
+    public final void setTarget(MethodHandle newMH) {
+        // No-op
+    }
+
+    /**
+     * Always returns method handle set with {@link #setMH(MethodHandle)} method
+     */
+    public final MethodHandle getTarget() {
+        return mh;
+    }
+
+    public final MethodHandle dynamicInvoker() {
+        return makeDynamicInvoker();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/patches/java.base/jdk/internal/org/objectweb/asm/ClassWriterExt.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package jdk.internal.org.objectweb.asm;
+
+import java.lang.reflect.InaccessibleObjectException;
+
+public class ClassWriterExt extends ClassWriter {
+    private boolean cacheInvokeDynamic = true;
+    private boolean cacheMTypes = true;
+    private boolean cacheMHandles = true;
+
+    private final Item key = new Item();
+
+    public ClassWriterExt(ClassReader cr, int flags) {
+        super(cr, flags);
+    }
+
+    public ClassWriterExt(int flags) {
+        super(flags);
+    }
+
+    @Override
+    Item newInvokeDynamicItem(final String name, final String desc,
+                    final Handle bsm, final Object... bsmArgs) {
+        if (cacheInvokeDynamic) {
+            return super.newInvokeDynamicItem(name, desc, bsm, bsmArgs);
+        }
+        int type = ClassWriter.INDY;
+        disableItemHashTableFor(type);
+        Item result;
+        try {
+            return super.newInvokeDynamicItem(name, desc, bsm, bsmArgs);
+        } finally {
+            restoreItemHashTableFor(type);
+        }
+    }
+
+    @Override
+    Item newStringishItem(final int type, final String value) {
+        if (type != ClassWriter.MTYPE) {
+            return super.newStringishItem(type, value);
+        }
+        if (cacheMTypes) {
+            return super.newStringishItem(type, value);
+        }
+        disableItemHashTableFor(type);
+        try {
+            return super.newStringishItem(type, value);
+        } finally {
+            restoreItemHashTableFor(type);
+        }
+    }
+
+    @Override
+    Item newHandleItem(final int tag, final String owner, final String name,
+            final String desc, final boolean itf) {
+        if (cacheMHandles) {
+            return super.newHandleItem(tag, owner, name, desc, itf);
+        }
+        int type = ClassWriter.HANDLE_BASE + tag;
+        disableItemHashTableFor(type);
+        try {
+            return super.newHandleItem(tag, owner, name, desc, itf);
+        } finally {
+            restoreItemHashTableFor(type);
+        }
+    }
+
+    private void disableItemHashTableFor(int type) {
+        for (Item i : items) {
+            while (i != null) {
+                if (i.type == type) {
+                    i.type = -type;
+                }
+                i = i.next;
+            }
+        }
+    }
+
+    private void restoreItemHashTableFor(int type) {
+        for (Item i : items) {
+            while (i != null) {
+                if (i.type == -type) {
+                    i.type = type;
+                }
+                i = i.next;
+            }
+        }
+    }
+
+    public void setCacheInvokeDynamic(boolean value) {
+        cacheInvokeDynamic = value;
+    }
+    public void setCacheMTypes(boolean value) {
+        cacheMTypes = value;
+    }
+    public void setCacheMHandles(boolean value) {
+        cacheMHandles = value;
+    }
+
+    public int getBytecodeLength(MethodVisitor mv) {
+        ByteVector code;
+        try {
+            java.lang.reflect.Field field = mv.getClass().getDeclaredField("code");
+            field.setAccessible(true);
+            code = (ByteVector) field.get(mv);
+        } catch (InaccessibleObjectException | SecurityException | ReflectiveOperationException e) {
+            throw new Error("can not read field 'code' from class " + mv.getClass(), e);
+        }
+        try {
+            java.lang.reflect.Field field = code.getClass().getDeclaredField("length");
+            field.setAccessible(true);
+            return field.getInt(code);
+        } catch (InaccessibleObjectException | SecurityException | ReflectiveOperationException e) {
+            throw new Error("can not read field 'length' from class " + code.getClass(), e);
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ClassfileGenerator.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import nsk.share.ArgumentParser;
+
+public abstract class ClassfileGenerator {
+
+    public static class Klass {
+        private String pkgName;
+        private String className;
+        private byte[] bytes;
+        private String mainMethodName;
+        private String mainMethodSignature;
+
+        public Klass(String packageName, String className, String mainMethodName, String mainMethodSignature, byte[] bytes) {
+            this.pkgName = packageName;
+            this.className = className;
+            this.mainMethodName = mainMethodName;
+            this.mainMethodSignature = mainMethodSignature;
+            this.bytes = bytes;
+        }
+
+        public String getClassName() {
+            return (this.pkgName != null ? (this.pkgName + ".") : "") + this.className;
+        }
+
+        public String getSimpleClassName() {
+            return this.className;
+        }
+
+        public String getPackageName() {
+            return this.pkgName;
+        }
+
+        public String getMainMethodName() {
+            return mainMethodName;
+        }
+
+        public String getMainMethodSignature() {
+            return mainMethodSignature;
+        }
+
+        public byte[] getBytes() {
+            return this.bytes;
+        }
+
+        public void writeClass(String destDir) throws IOException {
+            boolean wroteOk = false;
+
+            File outDir;
+            if (this.pkgName != null)
+                outDir = new File(destDir, this.pkgName.replace('.', '/'));
+            else
+                outDir = new File(".");
+
+            outDir.mkdirs();
+
+            File outFile = new File(outDir, this.className.concat(".class"));
+            FileOutputStream outStream = new FileOutputStream(outFile);
+            try {
+                outStream.write(this.bytes);
+                wroteOk = true;
+            } finally {
+                outStream.close();
+
+                if (!wroteOk)
+                    outFile.delete();
+            }
+        }
+    }
+
+    protected String fullClassName, pkgName, shortClassName;
+
+    public void setClassName(String pkgName, String shortClassName) {
+        this.pkgName = pkgName;
+        this.shortClassName = shortClassName;
+        fullClassName = (pkgName == null ? "" : (pkgName.replace('.', '/') + '/'))
+                      + shortClassName;
+    }
+
+    public abstract Klass[] generateBytecodes();
+
+    public static void main(String[] args) {
+        try {
+            Env.init(new ArgumentParser(args) {
+                @Override
+                protected boolean checkOption(String option, String value) {
+                    if (option.equals("d"))
+                        return true;
+
+                    return super.checkOption(option, value);
+                }
+            });
+
+            Class<?> caller = Class.forName(Thread.currentThread()
+                    .getStackTrace()[2].getClassName());
+            ClassfileGenerator gen = (ClassfileGenerator) caller.newInstance();
+            gen.setClassName(caller.getPackage().getName(), caller
+                    .getSimpleName().replaceFirst("^GENERATE_", ""));
+
+            String destDir = Env.getArgParser().getOptions().getProperty("d");
+
+            Klass[] klasses = gen.generateBytecodes();
+
+            for (Klass k : klasses)
+                k.writeClass(destDir);
+
+        } catch (Exception e) {
+            Env.complain(e, "Generator caught an error");
+            System.exit(1);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ClassfileGeneratorTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.List;
+import java.util.LinkedList;
+
+import vm.mlvm.share.ClassfileGenerator;
+import vm.mlvm.share.CustomClassLoaders;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.share.options.Option;
+
+public class ClassfileGeneratorTest extends MlvmTest {
+
+    public static final String CLASS_NAME = "Dummy";
+
+    @Option(name = "generator", default_value = "", description = "Class name of the generator. Must inherit from vm.mlvm.share.ClassfileGenerator")
+    private String generatorClassNameOpt;
+
+    private Class<? extends ClassfileGenerator> generatorClass;
+
+    public ClassfileGeneratorTest() {
+    }
+
+    public ClassfileGeneratorTest(Class<? extends ClassfileGenerator> genClass) {
+        generatorClass = genClass;
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+        if (generatorClass == null) {
+            generatorClass = Class.forName(generatorClassNameOpt).asSubclass(ClassfileGenerator.class);
+        }
+
+        Env.traceVerbose("Generating class");
+        ClassfileGenerator gen = generatorClass.newInstance();
+
+        gen.setClassName(null, CLASS_NAME);
+        ClassfileGenerator.Klass k = gen.generateBytecodes()[0];
+        k.writeClass(".");
+        ClassLoader cl = CustomClassLoaders.makeClassBytesLoader(k.getBytes(), k.getClassName());
+
+        Env.traceNormal("Loading class " + k.getClassName());
+        Class<?> dummyClass = cl.loadClass(k.getClassName());
+
+        MethodType mt = MethodType.fromMethodDescriptorString(k.getMainMethodSignature(), getClass().getClassLoader());
+        MethodHandle m = MethodHandles.lookup().findStatic(dummyClass, k.getMainMethodName(), mt);
+
+        Env.traceVerbose("Main method: " + m);
+
+        // Generate default parameter values
+        List<Object> arguments = new LinkedList<>();
+        for(Class<?> t : mt.wrap().parameterArray()) {
+            Object arg;
+            if (t.isArray()) {
+                arg = java.lang.reflect.Array.newInstance(t.getComponentType(), 0);
+            } else {
+                arg = t.newInstance();
+            }
+            arguments.add(arg);
+        }
+
+        Env.traceNormal("Invoking method " + m);
+        m.invokeWithArguments(arguments);
+
+        return true;
+    }
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/CustomClassLoaders.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.io.IOException;
+
+import vm.share.FileUtils;
+
+public class CustomClassLoaders {
+
+    public static ClassLoader makeClassBytesLoader(final byte[] classBytes,
+            final String className) {
+        return new ClassLoader() {
+            @Override
+            protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+                Env.traceDebug("Custom loader: requested=" + name + "; can supply=" + className);
+
+                if (!name.equals(className))
+                    return super.loadClass(name, resolve);
+
+                Env.traceDebug("Custom loader: defining " + className + " (" + classBytes.length + ") bytes");
+
+                return defineClass(className, classBytes, 0, classBytes.length);
+            }
+        };
+    }
+
+    public static ClassLoader makeCustomClassLoader(final String forClassName) throws IOException {
+        return makeClassBytesLoader(FileUtils.readClass(forClassName), forClassName);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/DekkerTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,331 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.util.concurrent.BrokenBarrierException;
+import java.util.concurrent.CyclicBarrier;
+import nsk.share.Log.TraceLevel;
+import vm.share.options.Option;
+
+/**
+ * The test looks for late CPU stores, which is not visible for other CPU.
+ * <p>
+ * In absence of synchronization (such as memory barriers and so on), typical modern CPUs
+ * (Intel x86 32/64, SPARC in TSO mode) put stores into buffer instead of immediately writing them to memory.
+ *
+ * So the following program:
+ * <code>
+ *    write A
+ *    read B
+ * </code>
+ * can actually be transformed to and seen by other processors as:
+ * <code>
+ *    read B
+ *    write A
+ *  </code>
+ * <p>
+ * DekkerTest runs two threads, A and B, which perform operations on a shared array of Actors concurrently.
+ * Reordering mentioned above is detected by the test and reported as failure
+ * (unless mayFail option is specified in the constructor or command-line option).
+ *
+ * <p>
+ * The tests should subclass Actor with test-specific data and code.
+ * The Actor subclass requirements:
+ *
+ * <ul>
+ * <li>the class should have two data fields:
+ * <code>
+ *   A
+ *   B
+ * </code>
+ *   of the same type, which are able hold one of two values.
+ *   Let's call these values TRUE and FALSE (these can be any two values, say 0 and 1).
+ *
+ * <li>* actorA() is called from thread A and should implement the following pseudo-code:
+ * <code>
+ *   A = TRUE
+ *   optional MEMBAR #StoreLoad
+ *   return (B == TRUE)
+ * </code>
+ *
+ * <li>actorB() is called from thread B and should do the following:
+ * <code>
+ *   {
+ *       B = TRUE
+ *       optional MEMBAR #StoreLoad
+ *       return (A == TRUE)
+ *   }
+ * </code>
+ *
+ * <li>reset() method should do the following:
+ * <code>
+ *   {
+ *       A = FALSE
+ *       B = FALSE
+ *   }
+ * </code>
+ *
+ *   The use of memory barriers in actorX() methods is up to the implementor -- depending on the goal of testing.
+ *
+ */
+public class DekkerTest extends MlvmTest {
+
+    @Option(name = "actorClass", default_value = "", description = "Name of actor class (see test comments)")
+    private String actorClassNameOpt = "";
+
+    @Option(name = "mayFail", default_value = "false", description = "Don't report test failure (use it just a stress test)")
+    private boolean mayFailOpt;
+
+    @Option(name = "iterations", default_value = "1000000", description = "Number of iterations in each Actor thread (i.e., shared array size)")
+    private int iterationsOpt = 1000000;
+
+    /**
+     * Actor interface, which should be implemented for using with DekkerTest.
+     * The requirements for Actor implementation are outlined in {@link DekkerTest} class documentation.
+     */
+    public interface Actor {
+        /**
+         * Sets fields A and B to false
+         */
+        void reset();
+
+        /**
+         * Sets field A to true, and returns field B contents
+         * @return field B contents
+         * @throws Throwable in case of error
+         */
+        boolean actorA() throws Throwable;
+
+        /**
+         * Sets field B to true, and returns field A contents
+         * @return field A contents
+         * @throws Throwable in case of error
+         */
+        boolean actorB() throws Throwable;
+    }
+
+    private static final class ResultData {
+        public boolean a;
+        public boolean b;
+
+        public ResultData() {
+        }
+
+        public void reset() {
+            a = false;
+            b = false;
+        }
+    }
+
+    private static class RaceStatistics {
+        public int syncErrors;
+        public int runSideBySide;
+        public int A_outruns_B;
+        public int B_outruns_A;
+
+        public void reset() {
+            syncErrors = 0;
+            runSideBySide = 0;
+            A_outruns_B = 0;
+            B_outruns_A = 0;
+        }
+    }
+
+    private Class<? extends Actor> actorClass;
+    private final CyclicBarrier startBarrier = new CyclicBarrier(2); // We have two actors
+    private Actor[] testData;
+    private ResultData[] results;
+    private final RaceStatistics raceStatistics = new RaceStatistics();
+
+    public DekkerTest() {
+    }
+
+    /**
+     * Sets actor class.
+     * @param ac Actor class, which implements DekkerTest.Actor interface
+     */
+    public void setActorClass(Class<? extends Actor> ac) {
+        actorClass = ac;
+    }
+
+    /**
+     * Sets mayFail option. When set to true, synchronization failure is not reported as test failure (DekkerTest is used as a stress test).
+     * @param mayFail if true, don't report sync failure as test failure, false otherwise
+     */
+    public void setMayFailOpt(boolean mayFail) {
+        mayFailOpt = mayFail;
+    }
+
+    /**
+     * Initializes test data, parses command-line options and checks Actor class
+     */
+    @Override
+    public void initializeTest() {
+        // Override values set by setActorClass() by command-line option, if any
+        try {
+            if (!actorClassNameOpt.isEmpty()) {
+                actorClass = Class.forName(actorClassNameOpt).asSubclass(Actor.class);
+            } else {
+                if (actorClass == null) {
+                    throw new RuntimeException("Test error: the actor class should be specified via command-line options or in the constructor");
+                }
+            }
+
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException("Actor class '" + actorClassNameOpt + "' not found", e);
+        } catch (ClassCastException e) {
+            throw new RuntimeException("Test error: the actor class " + actorClass.getName() + " should implement " + Actor.class.getName() + " interface", e);
+        }
+
+        // Generate data
+        int iterations = iterationsOpt * getStressOptions().getIterationsFactor();
+        if (iterations <= 0) {
+            throw new RuntimeException("Invalid number of iterations specified in -iterations and -stressIterationsFactor options: " + iterations);
+        }
+
+        results = new ResultData[iterations];
+        for (int i = 0; i < results.length; ++i) {
+            results[i] = new ResultData();
+        }
+
+        testData = new Actor[results.length];
+        try {
+            for (int i = 0; i < testData.length; ++i) {
+                testData[i] = actorClass.newInstance();
+            }
+        } catch (ReflectiveOperationException e) {
+            throw new RuntimeException("Test error: can't instantiate class " + actorClass.getName(), e);
+        }
+    }
+
+    /**
+     * Resets the test data between test runs
+     */
+    @Override
+    public void resetTest() {
+        for (Actor a : testData) {
+            a.reset();
+        }
+        for (ResultData d : results) {
+            d.reset();
+        }
+    }
+
+    private class RunnerA extends Thread {
+        @Override
+        public void run() {
+            try {
+                startBarrier.await();
+                for (int i = 0; i < results.length; ++i) {
+                    results[i].a = testData[i].actorA();
+                }
+            } catch (Throwable t) {
+                markTestFailed("Exception in RunnerA", t);
+            }
+        }
+    }
+
+    private class RunnerB extends Thread {
+        @Override
+        public void run() {
+            try {
+                startBarrier.await();
+                for (int i = 0; i < results.length; ++i) {
+                    results[i].b = testData[i].actorB();
+                }
+            } catch (Throwable t) {
+                markTestFailed("Exception in RunnerB", t);
+            }
+        }
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+        RunnerA threadA = new RunnerA();
+        threadA.start();
+
+        RunnerB threadB = new RunnerB();
+        threadB.start();
+
+        threadA.join();
+        threadB.join();
+
+        if (isMarkedFailed())
+            return false;
+
+        analyzeResults();
+        printResults();
+
+        if (mayFailOpt) {
+            return true;
+        }
+
+        return (raceStatistics.syncErrors == 0);
+    }
+
+    private void analyzeResults() {
+        raceStatistics.reset();
+
+        for (int i = 0; i < results.length; ++i) {
+            boolean resultA = results[i].a;
+            boolean resultB = results[i].b;
+
+            if (resultA && resultB) {
+
+                ++raceStatistics.runSideBySide;
+
+            } else if (resultA && !resultB) {
+
+                ++raceStatistics.A_outruns_B;
+
+            } else if (!resultA && resultB) {
+
+                ++raceStatistics.B_outruns_A;
+
+            } else if (!resultA && !resultB) {
+
+                ++raceStatistics.syncErrors;
+
+            } else {
+
+                throw new RuntimeException("Should not reach here");
+            }
+        }
+    }
+
+    private void printResults() {
+        int logLevel = (raceStatistics.syncErrors != 0) ? TraceLevel.TRACE_IMPORTANT : TraceLevel.TRACE_NORMAL;
+
+        Env.getLog().trace(logLevel, "\n"
+                + "Late stores (sync. errors): " + raceStatistics.syncErrors + "\n"
+                + "B outruns A               : " + raceStatistics.B_outruns_A + "\n"
+                + "A outruns B               : " + raceStatistics.A_outruns_B + "\n"
+                + "A and B run side by side  : " + raceStatistics.runSideBySide);
+    }
+
+    public static void main(String[] args) {
+        MlvmTest.launch(args);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/Env.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.util.Random;
+
+import nsk.share.ArgumentParser;
+import nsk.share.Log;
+import nsk.share.Log.TraceLevel;
+import nsk.share.test.LazyFormatString;
+
+public class Env {
+
+    private static class StaticHolder {
+        public static ArgumentParser argParser;
+        public static Log log;
+        static {
+            init(new String[0]);
+        }
+
+        public static void init(String... args) {
+            init(new IgnoreUnknownArgumentParser(args));
+        }
+
+        public static void init(ArgumentParser ap) {
+            StaticHolder.argParser = ap;
+            StaticHolder.log = new Log(System.out, StaticHolder.argParser);
+        }
+    }
+
+    public static ArgumentParser getArgParser() {
+        return StaticHolder.argParser;
+    }
+
+    public static Log getLog() {
+        return StaticHolder.log;
+    }
+
+    public static void init(String... args) {
+        StaticHolder.init(args);
+    }
+
+    public static void init(ArgumentParser ap) {
+        StaticHolder.init(ap);
+    }
+
+    //
+    // RNG
+    //
+
+    private static long _seed = new Random().nextLong();
+
+    public static void setRNGSeed(long seed) {
+        _seed = seed;
+    }
+
+    private static volatile boolean _wasSeedPrinted = false;
+
+    // Thread local variable containing each thread's ID
+    private static final ThreadLocal<Random> _threadRNG =
+        new ThreadLocal<Random>() {
+            @Override protected Random initialValue() {
+                if ( ! _wasSeedPrinted ) {
+                    _wasSeedPrinted = true;
+                    traceImportant("RNG seed = " + _seed + " (0x" + Long.toHexString(_seed) + ")");
+                }
+
+                long seed = _seed;
+                String name = Thread.currentThread().getName();
+                for ( int n = 0; n < name.length(); n++ )
+                    seed ^= name.charAt(n) << ((n % 7) * 8);
+
+                traceVerbose(Thread.currentThread() + " RNG seed = " + seed + " (0x" + Long.toHexString(seed) + ")");
+
+                return new Random(seed);
+            }
+        };
+
+    public static Random getRNG() {
+        return _threadRNG.get();
+    }
+
+    //
+    // Syntactic sugar
+    //
+
+    public static void traceImportant(String msg) {
+        getLog().trace(TraceLevel.TRACE_IMPORTANT, msg);
+    }
+
+    public static void traceImportant(String msg, Object... args) {
+        getLog().trace(TraceLevel.TRACE_IMPORTANT, new LazyFormatString(msg, args));
+    }
+
+    public static void traceImportant(Throwable t, String msg, Object... args) {
+        getLog().trace(TraceLevel.TRACE_IMPORTANT, new LazyFormatString(msg, args), t);
+    }
+
+    public static void traceNormal(String msg) {
+        getLog().trace(TraceLevel.TRACE_NORMAL, msg);
+    }
+
+    public static void traceNormal(String msg, Object... args) {
+        getLog().trace(TraceLevel.TRACE_NORMAL, new LazyFormatString(msg, args));
+    }
+
+    public static void traceNormal(Throwable t, String msg, Object... args) {
+        getLog().trace(TraceLevel.TRACE_NORMAL, new LazyFormatString(msg, args), t);
+    }
+
+    public static void traceVerbose(String msg) {
+        getLog().trace(TraceLevel.TRACE_VERBOSE, msg);
+    }
+
+    public static void traceVerbose(String msg, Object... args) {
+        getLog().trace(TraceLevel.TRACE_VERBOSE, new LazyFormatString(msg, args));
+    }
+
+    public static void traceVerbose(Throwable t, String msg, Object... args) {
+        getLog().trace(TraceLevel.TRACE_VERBOSE, new LazyFormatString(msg, args), t);
+    }
+
+    public static void traceDebug(String msg) {
+        getLog().trace(TraceLevel.TRACE_DEBUG, msg);
+    }
+
+    public static void traceDebug(String msg, Object... args) {
+        getLog().trace(TraceLevel.TRACE_DEBUG, new LazyFormatString(msg, args));
+    }
+
+    public static void traceDebug(Throwable t, String msg, Object... args) {
+        getLog().trace(TraceLevel.TRACE_DEBUG, new LazyFormatString(msg, args), t);
+    }
+
+    public static void display(String msg) {
+        getLog().trace(TraceLevel.TRACE_IMPORTANT, msg);
+    }
+
+    public static void display(String msg, Object... args) {
+        getLog().trace(TraceLevel.TRACE_IMPORTANT, new LazyFormatString(msg, args));
+    }
+
+    public static void complain(String msg) {
+        getLog().complain(msg);
+    }
+
+    public static void complain(String msg, Object... args) {
+        getLog().complain(new LazyFormatString(msg, args));
+    }
+
+    public static void complain(Throwable t, String msg, Object... args) {
+        getLog().complain(new LazyFormatString(msg, args), t);
+    }
+
+    /**
+     * Throws an arbitrary exception as unchecked one.
+     * The method does not return normally.
+     *
+     * If the exception is not a subclass of java.lang.RuntimeException`
+     * or java.lang.Error, it is wrapped into java.lang.RuntimeException
+     *
+     * @param exception Exception to throw (wrapping it when it is checked on)
+     */
+    public static void throwAsUncheckedException(Throwable exception) {
+        if (exception instanceof RuntimeException) {
+            throw (RuntimeException) exception;
+        }
+
+        if (exception instanceof Error) {
+            throw (Error) exception;
+        }
+
+        throw new RuntimeException(exception.getMessage(), exception);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/ExceptionsOptionObjectFactory.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.util.List;
+import java.util.ArrayList;
+import vm.share.options.OptionObjectFactory;
+import java.util.regex.Pattern;
+
+/**
+ * Implementation of vm.share.options.OptionObjectFactory interface.
+ * Parses the comma-separated list of exception class names.
+ *
+ * @see vm.mlvm.share.MlvmTest
+ * @see vm.mlvm.share.MlvmTestExecutor#launch(Class<?> testClass, Object[] constructorArgs)
+ *
+ */
+
+public class ExceptionsOptionObjectFactory implements OptionObjectFactory<List<Class<? extends Throwable>>> {
+
+    private static final String DESCRIPTION = "list of exception class names separated by comma";
+
+    @Override
+    public String getPlaceholder() {
+        return DESCRIPTION;
+    }
+
+    @Override
+    public String getDescription() {
+        return DESCRIPTION;
+    }
+
+    @Override
+    public String getParameterDescription(String param) {
+        return "exception of type " + param;
+    }
+
+    @Override
+    public String[] getPossibleValues() {
+        return new String[] { Throwable.class.getName() };
+    }
+
+    @Override
+    public String getDefaultValue() {
+        return "";
+    }
+
+    @Override
+    public List<Class<? extends Throwable>> getObject(String classNameList) {
+        List<Class<? extends Throwable>> result = new ArrayList<>();
+        classNameList = classNameList.trim();
+
+        if (!classNameList.isEmpty()) {
+            for (String className : classNameList.split(",")) {
+                result.add(getClassFor(className.trim()));
+            }
+        }
+
+        return result;
+    }
+
+    private static Class<? extends Throwable> getClassFor(String className) {
+        try {
+            return Class.forName(className).asSubclass(Throwable.class);
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException("Cannot find class '" + className + "'", e);
+        } catch (ClassCastException e) {
+            throw new RuntimeException("Subclass of " + Throwable.class.getName() + " should be specified. Cannot cast '" + className + "' to the Throwable", e);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/IgnoreUnknownArgumentParser.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,16 @@
+package vm.mlvm.share;
+
+import nsk.share.ArgumentParser;
+
+public class IgnoreUnknownArgumentParser extends ArgumentParser {
+
+    IgnoreUnknownArgumentParser(String[] args) {
+        super(args);
+    }
+
+    @Override
+    protected boolean checkOption(String option, String value) {
+        return true;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/IndifiedClassesBuilder.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import jdk.test.lib.Utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+public class IndifiedClassesBuilder {
+    public static void main(String... args) {
+        Path[] targets;
+        if (args.length != 0) {
+            targets = Arrays.stream(args)
+                            .map(Paths::get)
+                            .toArray(Path[]::new);
+            for (Path path : targets) {
+                if (Files.notExists(path)) {
+                    throw new Error(path + " doesn't exist");
+                }
+                if (!Files.isDirectory(path)) {
+                    throw new Error(path + " isn't a directory");
+                }
+            }
+        } else {
+            targets = Arrays.stream(Utils.TEST_CLASS_PATH.split(File.pathSeparator))
+                            .map(Paths::get)
+                            .toArray(Path[]::new);
+        }
+        for (Path path : targets) {
+            if (!Files.isDirectory(path)) {
+                continue;
+            }
+            try (Stream<Path> files = Files.walk(path)) {
+                files.filter(
+                        p -> {
+                            String s = p.getFileName().toString();
+                            return s.startsWith("INDIFY_") && s.endsWith(".class");
+                        })
+                     .forEach( p -> IndifiedClassesBuilder.indify(p, path));
+            } catch (IOException e) {
+                throw new Error("can't traverse path " + path);
+            }
+        }
+    }
+
+    private static void indify(Path file, Path path) {
+        Path tmp = Paths.get("indify.tmp");
+        try {
+            Files.createDirectories(tmp);
+        } catch (IOException e) {
+            throw new Error("can't create dir " + tmp, e);
+        }
+        try {
+            vm.mlvm.tools.Indify.main(
+                    "--all",
+                    "--overwrite",
+                    "--transitionalJSR292=no",
+                    "--dest", tmp.toAbsolutePath().toString(),
+                    file.toAbsolutePath().toString());
+
+            // workaround for "nested" classpaths
+            if (Files.exists(tmp.resolve(path.relativize(file)))) {
+                Files.copy(tmp.resolve(path.relativize(file)), file, StandardCopyOption.REPLACE_EXISTING);
+            }
+
+            delete(tmp);
+        } catch (IOException e) {
+            throw new Error("can't indify " + file, e);
+        }
+    }
+
+    private static void delete(Path dir) throws IOException {
+        Files.walkFileTree(dir, new SimpleFileVisitor<>() {
+            @Override
+            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                FileVisitResult result = super.visitFile(file, attrs);
+                Files.delete(file);
+                return result;
+            }
+
+            @Override
+            public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+                FileVisitResult result = super.postVisitDirectory(dir, exc);
+                Files.delete(dir);
+                return result;
+            }
+        });
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmOOMTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * The base class for Mlvm tests checking various OOM Errors.
+ * Subclasses are expected to implement {@link #eatMemory(List)}/
+ * {@link checkOOME(OutOfMemoryError)} methods consuming memory in various ways.
+ */
+public abstract class MlvmOOMTest extends MlvmTest {
+    private static Object garbage;
+
+    /**
+     * A template method.
+     * Implements logic of the tests:
+     * consumes memory in loop until OOM is thrown, checks the OOM type.
+     */
+    @Override
+    public final boolean run() {
+        Env.display("Test started.");
+        LinkedList<Object> objects = new LinkedList<Object>();
+        // to trick EA
+        garbage = objects;
+        try {
+            eatMemory(objects);
+        } catch (OutOfMemoryError oome) {
+            objects.clear();
+            Env.display("Caught OOME : " + oome.getMessage());
+            checkOOME(oome);
+            return true;
+        }
+        throw new RuntimeException("TEST FAIL : no OOME");
+    }
+
+    /**
+     * Consumes memory.
+     * Subclasses implement their logic of memory consuming. Created objects are expected
+     * to be stored in the given parameter.
+     * The normal termination of the method is throwing OOM exception, which will be checked
+     * by the {@link #checkOOME(OutOfMemoryError)}
+     * Not throwing the OOM will be interpreted as test failure.
+     * @param garbage a list to store generated garbage
+     */
+    protected abstract void eatMemory(List<Object> garbage);
+
+    /**
+     * Checks the OOME type is expected.
+     * Method just exits if OOME is expected and throws an exeption if not.
+     * @param oome thrown by {@link #eatMemory(List)}
+     */
+    protected abstract void checkOOME(OutOfMemoryError oome);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,342 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.util.Random;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import nsk.share.ArgumentParser;
+import nsk.share.Log;
+import nsk.share.Log.TraceLevel;
+import nsk.share.test.StressOptions;
+import nsk.share.test.Stresser;
+import vm.share.options.Option;
+import vm.mlvm.share.ExceptionsOptionObjectFactory;
+
+/**
+ * The base class for MLVM tests.
+ * Subclasses need to override {@link #run()} method to implement test logic.
+ */
+public abstract class MlvmTest {
+
+    /**
+     * MLVM tests are expected to implement this method to provide the logic.
+     *
+     * @return true if test passed, false if failed
+     * @throws Throwable any subclass of Throwable to indicate test failure
+     */
+    public abstract boolean run() throws Throwable;
+
+    /** Performs pre-run (prolog) actions in MlvmTest subclasses.
+     * The default implementation does nothing.
+     * Sublcasses may override this method to perform custom actions after test is initialized
+     * (initialization order is described in MlvmTestExecutor class) but before {@link run()} method is invoked.
+     * @throws Throwable in case of problem, which is interpreted as a test failure
+     * @see MlvmTestExecutor
+     */
+    protected void initializeTest() throws Throwable {
+    }
+
+    /** Performs post-run (epilog) actions.
+     * This method is executed after the {@link #run()} method.
+     * Does nothing by default.
+     * Subclasses may override this method when some finalization actions are required.
+     * Test fails if this method throws exception.
+     * @param result test execution status: true, if test passed, false otherwise
+     * @throws Throwable may throw any subclass of Throwable to indicate test failure (regardless of run() method result)
+     * @see MlvmTestExecutor
+     */
+    protected void finalizeTest(boolean result) throws Throwable {
+    }
+
+    /**
+     * Resets the tests between runs.
+     * You may override this method, especially if your test supports -stressRunsFactor option
+     * @throws Throwable may throw any subclass of Throwable to indicate test failure (regardless of run() method result)
+     * @see MlvmTestExecutor
+     */
+    protected void resetTest() throws Throwable {
+        testMarkedFailed = false;
+    }
+
+    // Options for all MlvmTests
+    @Option(name = "requireExceptions", default_value = "", factory = ExceptionsOptionObjectFactory.class,
+            description = "Specifying this option turns test into negative one: "
+                        + "the specified exception class names separated with commas have to be caught for the test to pass")
+    private List<Class<? extends Throwable>> requiredExceptionClasses = new ArrayList<>();
+
+    @Option(name = "seed", default_value = "0", description = "Initial random seed")
+    private long _seed;
+
+    @Option(name = "runs", default_value = "1", description = "How many times the test should be re-run")
+    private int runs = 1;
+
+    // Some internal stuff
+    private static MlvmTest instance;
+
+    /**
+     * Sets internal static variable to instance of the test.
+     * Used in debugger/debuggee tests.
+     * Not intended to work if there are several MlvmTests created.
+     * @param inst Instance of the test
+     */
+    public static void setInstance(MlvmTest inst) {
+        instance = inst;
+    }
+
+    /**
+     * Returns internal static variable holding instance of the test, which was set using {@link #setInstance()}.
+     * Used in debugger/debuggee tests.
+     * Not intended to work if there are several MlvmTests created.
+     * @return Instance of the test
+     */
+    public static MlvmTest getInstance() {
+        return instance;
+    }
+
+    private static String name = "Test";
+
+    /**
+     * Sets internal static variable to the name of the test.
+     * Debugger/debuggee MLVM tests use this feature to differentiate logging from debugger and debuggee
+     * Not intended to work if there are several MlvmTests created
+     * @param n Name of the test
+     */
+    public static void setName(String n) {
+        name = n;
+    }
+
+    /**
+     * Returns internal static variable holding the name of the test.
+     * Debugger/debuggee MLVM tests use this feature to differentiate logging from debugger and debuggee
+     * Not intended to work if there are several MlvmTests created
+     * @return Name of the test
+     */
+    public static String getName() {
+        return name;
+    }
+
+    void initRNG() {
+        if (_seed != 0) {
+            Env.setRNGSeed(_seed);
+        }
+        Env.traceVerbose("Initial seed = " + _seed);
+    }
+
+    /**
+     * Sets number of test runs
+     * @param r Number of test runs
+     */
+    public void setRunsNumber(int r) {
+        runs = r;
+    }
+
+    /**
+     * Return number of test runs
+     * @return Number of test runs
+     */
+    public int getRunsNumber() {
+        return runs;
+    }
+
+    // Sugar...
+    /**
+     * Provides Random Number Generator for the test. The tests should always use this generator
+     * to guarantee repeatability (using -seed option), especially in multi-threaded usages
+     * @return Random number generator for this thread, seeded with command-line option, if provided
+     */
+    public static Random getRNG() {
+        return Env.getRNG();
+    }
+
+    /**
+     * Returns logger, which is used in all MLVM framework. This guarantees correct ordering of messages
+     * @return Logger object
+     */
+    public static Log getLog() {
+        return Env.getLog();
+    }
+
+    /**
+     * ArgumentParser is the old implementation of command-line parser (the new tests should use
+     * vm.share.options framework). However it is maintained, because nsk JDI/SAJDI framework is built
+     * on ArgumentParser.
+     * @return ArgumentParser object created with command-line options (see {@link MlvmTestExecutor}
+     *         for details)
+     */
+    public static ArgumentParser getArgumentParser() {
+        return Env.getArgParser();
+    }
+
+    // ...and spice
+
+    /* Makes the test "negative": one of the specified exception classes has to be thrown by the test to pass.
+     * Test fails if exception has not been thrown.
+     * Boolean value returned by {@link run()} method is ignored.
+     * Calling {@link #markTestFailed()} causes test to fail anyway.
+     * <p>
+     * Invoke this method BEFORE run() method (e.g., in prolog) to instruct launcher
+     * to anticipate the exception instead of the positive (normal) mode.
+     * @param classes The list of exception classes
+     *                Empty list or null indicates that test is positive.
+     */
+    @SafeVarargs
+    public final void setRequiredExceptions(Class<? extends Throwable>... classes) {
+        setRequiredExceptions(Arrays.asList(classes));
+    }
+
+    /* Makes the test "negative": one of the specified exception classes has to be thrown by the test to pass.
+     * Test fails if exception has not been thrown.
+     * Boolean value returned by {@link run()} method is ignored.
+     * Calling {@link #markTestFailed()} causes test to fail anyway.
+     * <p>
+     * Invoke this method BEFORE run() method (e.g., in prolog) to instruct launcher
+     * @param classes The list of exception classes.
+     *                Empty list or null indicates that test is positive (in its standard form)
+     */
+    public final void setRequiredExceptions(List<Class<? extends Throwable>> classes) {
+        if (requiredExceptionClasses.size() > 0) {
+            Env.traceNormal("Expected exceptions specified in the test are overridden in command-line");
+            return;
+        }
+
+        requiredExceptionClasses = classes;
+    }
+
+    /**
+     * Returns the list of required exceptions
+     * (please see {@link #setRequiredExceptions(Class<? extends Throwable>... classes)} method for details.
+     * @return The list of exception classes. Empty list or null indicates that test is positive (in its standard form)
+     */
+    public final List<Class<? extends Throwable>> getRequiredExceptions() {
+        return requiredExceptionClasses;
+    }
+
+    private boolean testMarkedFailed = false;
+
+    /**
+     * Marks the test as failed.
+     * Regardless of run() method return value, the test is considered failed. Operation is not reversible.
+     * Can be called from multiple threads
+     */
+    protected final void markTestFailed() {
+        markTestFailed(null, null);
+    }
+
+    /**
+     * Marks the test as failed, indicating falure reason.
+     * Regardless of run() method return value, the test is considered failed. Operation is not reversible.
+     * Can be called from multiple threads
+     * @param msg A message to log (using Log.complain() method)
+     */
+    protected final void markTestFailed(String msg) {
+        markTestFailedImpl(msg, null);
+    }
+
+    /**
+     * Marks the test as failed, indicating falure reason and exception, which caused it.
+     * Regardless of run() method return value, the test is considered failed. Operation is not reversible.
+     * Can be called from multiple threads
+     * @param msg A message to log (using Log.complain() method)
+     * @param t An exception to log
+     */
+    protected final void markTestFailed(String msg, Throwable t) {
+        markTestFailedImpl(msg, t);
+    }
+
+    private synchronized void markTestFailedImpl(String msg, Throwable t) {
+        testMarkedFailed = true;
+
+        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
+        Env.complain(t, "%s marked failed at %s%s", getName(), stackTrace[3],
+                     msg == null ? "" : ":\n" + msg);
+
+    }
+
+    /**
+     * Checks if the test has marked failed.
+     * @return true, if the test marked failed
+     */
+    protected final synchronized boolean isMarkedFailed() {
+        return testMarkedFailed;
+    }
+
+    private static boolean dumpHeapAfter = false;
+
+    /**
+     * Checks if heap dump requestd after running the test.
+     * @return true, if the test marked failed
+     * @see MlvmTestExecutor for heap dumping details.
+     */
+    public static synchronized boolean getHeapDumpAfter() {
+        return dumpHeapAfter;
+    }
+
+    /**
+     * Sets or clears heap dumping request. Heap is dumped in MlvmTestExecutor after running the test.
+     *
+     * NB. heap dumping uses ProcessUtils libraries, so it should be added to library path in cfg-file:
+     * {@code export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${COMMON_LIBS_LOCATION}/lib/${ARCH}/vm/share"}
+     * @param enable true, if heap should be dumped, false if not
+     * @see MlvmTestExecutor for heap dumping details.
+     */
+    public static synchronized void setHeapDumpAfter(boolean enable) {
+        dumpHeapAfter = enable;
+    }
+
+    protected static Stresser createStresser() {
+        Stresser s = new Stresser(getArgumentParser().getStressOptions());
+        if (getLog().getTraceLevel() >= TraceLevel.TRACE_VERBOSE) {
+            s.printStressInfo(getLog().getOutStream());
+        }
+        return s;
+    }
+
+    protected static StressOptions getStressOptions() {
+        return getArgumentParser().getStressOptions();
+    }
+
+    // Launchers are left here for compatibility. Launching code has been moved to MlvmTestExecutor
+    // TODO: A minor bug has to be filed to replace MlvmTest.launch() calls with MlvmTestExecutor.launch()
+
+    protected static void launch(ArgumentParser argumentParser) {
+        MlvmTestExecutor.launch(argumentParser);
+    }
+
+    protected static void launch(ArgumentParser argumentParser, Object[] constructorArgs) {
+        MlvmTestExecutor.launch(argumentParser, constructorArgs);
+    }
+
+    protected static void launch(String[] args) {
+        MlvmTestExecutor.launch(args, null);
+    }
+
+    protected static void launch(String[] args, Object[] constructorArgs) {
+        MlvmTestExecutor.launch(args, constructorArgs);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTestExecutor.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,488 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.lang.reflect.Constructor;
+import java.util.List;
+
+import nsk.share.Consts;
+import nsk.share.ArgumentParser;
+import vm.share.ProcessUtils;
+import vm.share.options.IgnoreUnknownArgumentsHandler;
+import vm.share.options.OptionSupport;
+
+/**
+ * This class executes a test based on (a subclass of) either:
+ * <ul>
+ *   <li>{@link vm.mlvm.share.MlvmTest}
+ *   <li>{@link java.lang.Runnable}
+ * </ul>
+ * using a number of launch() methods.
+ *
+ * Command-line parameters are parsed and set to the instance fields of the test marked with {@literal@}Option/Options annotations. See {@link vm.share.options} framework for details.
+ *
+ * Arguments for test constructor can be passed as well.
+ *
+ * Additionally the launch() methods:
+ * <ul>
+ *   <li>measures test run time
+ *   <li> handles all test status passing methods (via boolean return value, via MlvmTest.markTestFailed() calls, exception thrown from overriden run() method)
+ *   <li>optionally dumps heap after test execution if MlvmTest.setHeapDumpAfer(true) was called
+ * </ul>
+ *
+ * @see vm.mlvm.share.MlvmTest
+ * @see vm.share.options
+ *
+ */
+public class MlvmTestExecutor {
+
+    /**
+     * The heap dump file name. If you call MlvmTest.setHeapDumpAfter(true), the heap is dumped into file
+     * specified by this constant when test finishes
+     */
+    public static final String HEAP_DUMP_FILENAME = "heap.dump";
+
+    /**
+     * Launches MLVM test.
+     * Please see documentation for {@link #launch(Class<?> testClass, Object[] constructorArgs)} method.
+     *
+     * This version of the method is a syntactic shugar to launch test in this way:
+     *
+     * <code>
+     * public class MyTest extends MlvmTest {
+     *     ...
+     *     public static void main(String[] args) {
+     *         MlvmTestExecutor.launch(new YourCustomArgumentParser(args));
+     *     }
+     * }
+     * </code>
+     *
+     * @param args Command-line arguments, which are taken from supplied ArgumentParser (ArgumentParser is needed for compatibility with old tests)
+                   and set to appropriate test instance fields using vm.share.options framework
+     * @see #launch(Class<?> testClass, Object[] constructorArgs)
+     */
+    public static void launch(ArgumentParser argumentParser) {
+        launch(argumentParser, null);
+    }
+
+    /**
+     * Launches MLVM test.
+     * Please see documentation for {@link #launch(Class<?> testClass, Object[] constructorArgs)} method.
+     *
+     * This version of the method is a syntactic shugar to launch test in this way:
+     *
+     * <code>
+     * public class MyTest extends MlvmTest {
+     *     ...
+     *     public static void main(String[] args) {
+     *         MlvmTestExecutor.launch(new YourCustomArgumentParser(args), new Object[] { constructor-arguments... });
+     *     }
+     * }
+     * </code>
+     *
+     * @param args Command-line arguments, which are taken from supplied ArgumentParser (ArgumentParser is needed for compatibility with old tests)
+                   and set to appropriate test instance fields using vm.share.options framework
+     * @param constructorArgs Arguments, which are parsed to test constructor
+     * @see #launch(Class<?> testClass, Object[] constructorArgs)
+     */
+    public static void launch(ArgumentParser argumentParser, Object[] constructorArgs) {
+        Env.init(argumentParser);
+        launch(constructorArgs);
+    }
+
+    /**
+     * Launches MLVM test.
+     * Please see documentation for {@link #launch(Class<?> testClass, Object[] constructorArgs)} method.
+     *
+     * This version of the method is a syntactic shugar to launch test in this way:
+     *
+     * <code>
+     * public class MyTest extends MlvmTest {
+     *     ...
+     *     public static void main(String[] args) {
+     *         MlvmTestExecutor.launch(args);
+     *     }
+     * }
+     * </code>
+     *
+     * @param args Command-line arguments, which are parsed using internal ArgumentParser (for compatibility with old tests) and also set to appropriate test instance fields using vm.share.options framework
+     * @see #launch(Class<?> testClass, Object[] constructorArgs)
+     */
+    public static void launch(String[] args) {
+        launch(args, null);
+    }
+
+    /**
+     * Launches MLVM test.
+     * Please see documentation for {@link #launch(Class<?> testClass, Object[] constructorArgs)} method.
+     *
+     * This version of the method is a syntactic shugar to launch test in this way:
+     *
+     * <code>
+     * public class MyTest extends MlvmTest {
+     *     ...
+     *     public static void main(String[] args) {
+     *         MlvmTestExecutor.launch(args, new Object[] { constructor-arguments... });
+     *     }
+     * }
+     * </code>
+     *
+     * @param args Command-line arguments, which are parsed using internal ArgumentParser (for compatibility with old tests) and also set to appropriate test instance fields using vm.share.options framework
+     * @param constructorArgs Arguments, which are parsed to test constructor
+     * @see #launch(Class<?> testClass, Object[] constructorArgs)
+     */
+    public static void launch(String[] args, Object[] constructorArgs) {
+        Env.init(args);
+        launch(constructorArgs);
+    }
+
+    /**
+     * Launches MLVM test.
+     * Please see documentation for {@link #launch(Class<?> testClass, Object[] constructorArgs)} method.
+     *
+     * This version of the method is a syntactic shugar to launch test in this way:
+     *
+     * <code>
+     * public class MyTest extends MlvmTest {
+     *     ...
+     *     void aMethod() {
+     *         ...
+     *         MlvmTestExecutor.launch(new Object[] { constructor-arguments... });
+     *     }
+     * }
+     * </code>
+     *
+     * @param constructorArgs Arguments, which are parsed to test constructor
+     * @see #launch(Class<?> testClass, Object[] constructorArgs)
+     */
+    public static void launch(Object[] constructorArgs) {
+        Class<?> testClass = getTestClassFromCallerStack();
+
+        if (testClass == null) {
+            throw new RuntimeException("TEST BUG: Can't find an instance of MlvmTest or Runnable in the stacktrace");
+        }
+
+        launch(testClass, constructorArgs);
+    }
+
+    private static Class<?> getTestClassFromCallerStack() {
+        try {
+            StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
+
+            // Elements of the stack trace: 0=Thread.getStackTrace(), 1rd=this method, 2nd=launch() method
+            // So we start searching from the most outer frame and finish searching at element 3
+            for (int i = stackTrace.length - 1; i >= 3; --i) {
+                StackTraceElement e = stackTrace[i];
+                Class<?> klass = Class.forName(e.getClassName());
+                if (MlvmTest.class.isAssignableFrom(klass)) {
+                    return klass;
+                }
+            }
+
+            return null;
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException("Unable to get Class object by its name either due to a different ClassLoader (a test bug) or JVM error", e);
+        }
+    }
+
+    /**
+     * Launches MLVM test. The method is the principal MLVM test launcher. This method in conjunction with {@link #runMlvmTest} method:
+     * <ol>
+     *   <li>instantiates test class (optionally passing arguments to constructor)
+     *   <li>parses command-line arguments using vm.share.options framework and updates the appropriate test fields
+     *   <li>launches the tests
+     *   <li>handles all test status passing methods (see below)
+     *   <li>performs System.exit() with VM-testbase standard exit code 95 (success) or 97 (failure).
+     * </ol>
+     *
+     * <p>The following tests status passing mechanism are available to test writer:
+     * <ol>
+     *   <li>Return a boolean value (true if test passed, false otherwise. Good for simple tests)
+     *   <li>Assume that test has failed by calling {@link MlvmTest#markTestFailed()} method (suitable for complex logic and multithreaded tests)
+     *   <li>by throwing exception from test {@link MlvmTest#run()} method
+     * </ol>
+
+     * <p>Additionally the launcher:
+     * <ul>
+     *   <li>measures test run time and logs it
+     *   <li>optionally dumps heap after test execution if {@link MlvmTest#setHeapDumpAfer(true)} was called
+     *   <li>enables verbose logging on error
+     * </ul>
+     *
+     * @param testClass a class to instantiate. Has to be subclass of vm.mlvm.share.MlvmTest or java.lang.Runnable
+     * @param constructorArgs Arguments to pass to test constructor. Can be null.
+     * @see #runMlvmTest(Class<?> testClass, Object[] constructorArgs)
+     */
+    public static void launch(Class<?> testClass, Object[] constructorArgs) {
+        Env.getLog().enableVerboseOnError(true);
+
+        long startTime = System.currentTimeMillis();
+        boolean passed;
+        try {
+            Env.traceDebug(MlvmTest.getName() + " class: " + testClass);
+            passed = runMlvmTest(testClass, constructorArgs);
+        } catch (Throwable e) {
+            Env.complain(e, MlvmTest.getName() + " caught an exception: ");
+            passed = false;
+        }
+
+        long finishTime = System.currentTimeMillis();
+        Env.traceNormal("The test took " + (finishTime - startTime) + " ms");
+
+        optionallyDumpHeap();
+
+        final String testNameUC = MlvmTest.getName().toUpperCase();
+        if (passed) {
+            Env.display(testNameUC + " PASSED");
+            System.exit(Consts.JCK_STATUS_BASE + Consts.TEST_PASSED);
+        } else {
+            Env.display(testNameUC + " FAILED");
+            System.exit(Consts.JCK_STATUS_BASE + Consts.TEST_FAILED);
+        }
+    }
+
+    private static void optionallyDumpHeap() {
+        try {
+            if (MlvmTest.getHeapDumpAfter()) {
+                ProcessUtils.dumpHeapWithHotspotDiagnosticMXBean(HEAP_DUMP_FILENAME);
+            }
+        } catch (Exception e) {
+            Env.traceNormal(e, "Error dumping heap: ");
+        }
+    }
+
+    /**
+     * Launches MLVM test (syntatic shugar method).
+     * Calls {@link #runMlvmTest(Class<?> testClass, Object[] constructorArgs)} method providing no arguments to pass to the test constructor.
+     *
+     * The method throws unchecked exception when there is an error in test logic or handling.
+     * Exceptions thrown from MlvmTest.run() method or test constructor are wrapped into java.lang.RuntimeException or java.lang.Error
+     *
+     * @param testClass a class to instantiate. Has to be subclass of vm.mlvm.share.MlvmTest or java.lang.Runnable
+     * @return true if test passed, false otherwise
+     * @see #runMlvmTest(Class<?> testClass, Object[] constructorArgs)
+     */
+    public static boolean runMlvmTest(Class<?> testClass) {
+        return runMlvmTest(testClass, null);
+    }
+
+    /**
+     * Launches MLVM test. In details, it:
+     * <ol>
+     *   <li>instantiates test class (optionally passing arguments to constructor)
+     *   <li>parses command-line arguments using vm.share.options framework and updates the appropriate test fields
+     *   <li>launches the tests
+     *   <li>handles all test status passing methods (see below)
+     * </ol>
+     *
+     * <p>Unlike {@link #launch()} methods, it does NOT:
+     * <ul>
+     *   <li>performs System.exit() with VM-testbase standard exit code 95 (success) or 97 (failure).
+     *   <li>measures test run time and logs it
+     *   <li>optionally dumps heap after test execution if {@link MlvmTest#setHeapDumpAfer(true)} was called
+     *   <li>enables verbose logging on error
+     * </ul>
+     * Please see {@link #launch(Class<?> testClass, Object[] constructorArgs)} for additional details.
+     *
+     * The method throws unchecked exception when there is an error in test logic or handling.
+     * Exceptions thrown from MlvmTest.run() method or test constructor are wrapped into java.lang.RuntimeException or java.lang.Error
+     *
+     * @param testClass a class to instantiate. Has to be subclass of vm.mlvm.share.MlvmTest or java.lang.Runnable
+     * @param constructorArgs Arguments to pass to test constructor. Can be null.
+     * @return true if test passed, false otherwise
+     * @see #launch(Class<?> testClass, Object[] constructorArgs)
+     */
+    public static boolean runMlvmTest(Class<?> testClass, Object[] constructorArgs) {
+        boolean passed;
+        Throwable exception = null;
+
+        try {
+            MlvmTest instance = constructMlvmTest(testClass, constructorArgs);
+            setupMlvmTest(instance);
+
+            instance.initializeTest();
+
+            try {
+                passed = runMlvmTestInstance(instance);
+            } catch(Throwable e) {
+                exception = e;
+                passed = false;
+            }
+
+            try {
+                instance.finalizeTest(passed);
+            } catch (Throwable e) {
+                Env.complain(e, "TEST BUG: exception thrown in finalizeTest");
+                if (exception == null) {
+                    exception = e;
+                }
+                passed = false;
+            }
+
+        } catch (Throwable e) {
+            Env.complain(e, "TEST BUG: exception thrown when instantiating/preparing test for run");
+            exception = e;
+            passed = false; // never really needed, but let's keep it
+        }
+
+        if (exception != null) {
+            Env.throwAsUncheckedException(exception); // always throws
+        }
+
+        return passed;
+    }
+
+    private static void setupMlvmTest(MlvmTest instance) {
+        MlvmTest.setInstance(instance);
+        OptionSupport.setup(instance, Env.getArgParser().getRawArguments(), new IgnoreUnknownArgumentsHandler());
+        instance.initRNG();
+    }
+
+    private static boolean runMlvmTestInstance(MlvmTest instance) throws Throwable {
+        List<Class<? extends Throwable>> expectedExceptions = instance.getRequiredExceptions();
+        int runsCount = instance.getRunsNumber() * instance.getStressOptions().getRunsFactor();
+        if (runsCount < 1) {
+            throw new RuntimeException("Runs number obtained via command-line options is less than 1");
+        }
+
+        int failedRuns = 0;
+
+        try {
+            for (int run = 1; run <= runsCount; ++run) {
+                if (runsCount > 1) {
+                    Env.traceNormal("TEST RUN " + run + "/" + runsCount + "; Failed " + failedRuns + " runs");
+                }
+
+                if (run > 1) {
+                    instance.resetTest();
+                }
+
+                boolean instancePassed;
+                if (expectedExceptions.size() == 0) {
+                    instancePassed = instance.run();
+                } else {
+                    try {
+                        instance.run();
+                        Env.complain("Expected exceptions: " + expectedExceptions + ", but caught none");
+                        instancePassed = false;
+                    } catch (Throwable e) {
+                        if (checkExpectedException(expectedExceptions, e)) {
+                            instancePassed = true;
+                        } else {
+                            Env.complain(e, "Expected exceptions: " + expectedExceptions + ", but caught: ");
+                            instancePassed = false;
+                        }
+                    }
+                }
+
+                if (instance.isMarkedFailed()) {
+                    instancePassed = false;
+                }
+
+                if (!instancePassed) {
+                    ++failedRuns;
+                }
+            }
+        } finally {
+             if (failedRuns > 0) {
+                 Env.complain("Failed runs: " + failedRuns + " of " + runsCount);
+             }
+        }
+
+        return failedRuns == 0;
+    }
+
+    private static Object constructTest(Class<?> testClass, Object[] constructorArgs) throws Throwable {
+        if (constructorArgs == null || constructorArgs.length == 0) {
+            return testClass.newInstance();
+        }
+
+        for (Constructor<?> c : testClass.getConstructors()) {
+            Class<?> paramClasses[] = c.getParameterTypes();
+            if (!parametersAreAssignableFrom(paramClasses, constructorArgs)) {
+                continue;
+            }
+
+            return c.newInstance(constructorArgs);
+        }
+
+        throw new RuntimeException("Test bug: in class " + testClass.getName() + " no appropriate constructor found for arguments " + constructorArgs);
+    }
+
+    private static MlvmTest constructMlvmTest(Class<?> testClass, Object[] constructorArgs) throws Throwable {
+        Object testObj = constructTest(testClass, constructorArgs);
+
+        MlvmTest instance;
+        if (testObj instanceof MlvmTest) {
+            instance = (MlvmTest) testObj;
+        } else if (testObj instanceof Runnable) {
+            instance = new RunnableWrapper((Runnable) testObj);
+        } else {
+            // You can add wrapping of other types of tests here into MlvmTest if you need
+            throw new RuntimeException("TEST BUG: Test class should be subclass of MlvmTest or Runnable. Its type is "
+                                     + testObj.getClass().getName());
+        }
+
+        return instance;
+    }
+
+    private static boolean parametersAreAssignableFrom(Class<?>[] paramClasses, Object[] constructorArgs) {
+        if (paramClasses.length != constructorArgs.length) {
+            return false;
+        }
+
+        for (int i = 0; i < paramClasses.length; ++i) {
+            if (!paramClasses[i].isAssignableFrom(constructorArgs[i].getClass())) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    private static boolean checkExpectedException(List<Class<? extends Throwable>> expectedExceptions, Throwable caught) throws Throwable {
+        for (Class<? extends Throwable> expected : expectedExceptions) {
+            if (expected.isAssignableFrom(caught.getClass())) {
+                Env.traceNormal("Caught anticipated exception " + caught.getClass().getName() + ". Cause: " + caught.getCause());
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    private static class RunnableWrapper extends MlvmTest {
+        private Runnable runnable;
+
+        public RunnableWrapper(Runnable r) {
+            runnable = r;
+        }
+
+        @Override
+        public boolean run() throws Throwable {
+            runnable.run();
+            return true;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MultiThreadedTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import vm.share.options.Option;
+
+import java.util.concurrent.CyclicBarrier;
+
+
+public abstract class MultiThreadedTest extends MlvmTest {
+
+    @Option(name = "threadsExtra", default_value = "1",
+            description = "Summand of absolute thread count that does not"
+                    + " depend on CPU count")
+    private int threadsExtra;
+
+    @Option(name = "threadsPerCpu", default_value = "0",
+            description = "Summand of absolute thread count that is multiplied"
+                    + " by CPU count")
+    private int threadsPerCpu;
+
+    protected MultiThreadedTest() {
+        // fields will be initialized later by the Option framework
+    }
+
+    protected abstract boolean runThread(int threadNum) throws Throwable;
+
+    protected int calcThreadNum() {
+        // TODO: multiply by StressThreadFactor: JDK-8142970
+        return threadsPerCpu * Runtime.getRuntime().availableProcessors()
+                + threadsExtra;
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+        Thread.UncaughtExceptionHandler exHandler = (Thread t, Throwable e) -> {
+            markTestFailed("Exception in thread %s" + t.getName(), e);
+        };
+        int threadNum = calcThreadNum();
+        Env.traceNormal("Threads to start in this test: " + threadNum);
+        final CyclicBarrier startBarrier = new CyclicBarrier(threadNum + 1);
+
+        Thread[] threads = new Thread[threadNum];
+        for (int i = 0; i < threadNum; i++) {
+            final int ii = i;
+            threads[i] = new Thread(() -> {
+                boolean passed = false;
+                try {
+                    startBarrier.await();
+                    if (runThread(ii)) {
+                        passed = true;
+                    } else {
+                        Env.complain("Failed test in %s",
+                                Thread.currentThread());
+                    }
+                } catch (Throwable e) {
+                    Env.complain(e, "Caught exception in %s",
+                            Thread.currentThread());
+                }
+                if (!passed) {
+                    markTestFailed("Thread " + Thread.currentThread()
+                            + " failed");
+                }
+            });
+            threads[i].setUncaughtExceptionHandler(exHandler);
+            threads[i].start();
+        }
+
+        startBarrier.await();
+        Env.traceNormal(threadNum + " threads have started");
+
+        for (int i = 0; i < threadNum; i++) {
+            threads[i].join();
+        }
+
+        Env.traceNormal("All threads have finished");
+        return true;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/Stratum.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface Stratum {
+    String stratumName() default "";
+    String stratumSourceFileName() default "";
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/StratumClassesBuilder.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.Utils;
+import jdk.test.lib.process.ProcessTools;
+import nsk.share.jdi.sde.InstallSDE;
+import vm.mlvm.tools.StratumAP;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+public class StratumClassesBuilder {
+    public static void main(String[] args) {
+        Path root = testRoot();
+        Arrays.stream(args)
+              .map(root::resolve)
+              .forEach(StratumClassesBuilder::build);
+    }
+
+    private static void build(Path file) {
+        if (Files.notExists(file)) {
+            throw new Error("can't find " + file);
+        }
+        Path dst = Paths.get("bin")
+                        .resolve("classes");
+        mkdir(dst);
+        compile(file, dst);
+        if (file.getFileName().toString().contains("SDE_")) {
+            IndifiedClassesBuilder.main(dst.toAbsolutePath().toString());
+        }
+        addStratum(dst);
+    }
+
+    private static void mkdir(Path dst) {
+        try {
+            Files.createDirectories(dst);
+        } catch (IOException e) {
+            throw new Error("can't create dir " + dst, e);
+        }
+    }
+
+    private static void compile(Path file, Path dst) {
+        JDKToolLauncher javac = JDKToolLauncher.create("javac")
+                                               .addToolArg("-d")
+                                               .addToolArg(dst.toString())
+                                               .addToolArg("-cp")
+                                               .addToolArg(Utils.TEST_CLASS_PATH)
+                                               .addToolArg("-processor")
+                                               .addToolArg(StratumAP.class.getName())
+                                               .addToolArg(file.toAbsolutePath().toString());
+
+        String[] command = javac.getCommand();
+        try {
+            ProcessTools.executeCommand(command)
+                        .shouldHaveExitValue(0);
+        } catch (Error | RuntimeException e) {
+            throw e;
+        } catch (Throwable e) {
+            throw new Error("execution of javac(" + Arrays.toString(command) + ") failed", e);
+        }
+    }
+
+    private static void addStratum(Path dst) {
+        try (Stream<Path> files = Files.walk(dst)) {
+            files.map(Path::toAbsolutePath)
+                 .filter(p -> p.getFileName().toString().contains("SDE_"))
+                 .filter(p -> p.toString().endsWith(".class"))
+                 .forEach(p -> {
+                     try {
+                         InstallSDE.install(
+                                 p.toFile(),
+                                 classToSmap(p).toFile(),
+                                 p.toFile(),
+                                 true);
+                     } catch (IOException e) {
+                         throw new Error("can't install sde for " + p);
+                     }
+                 });
+        } catch (IOException e) {
+            throw new Error("can't traverse " + dst, e);
+        }
+    }
+
+    private static Path classToSmap(Path file) {
+        String filename = file.getFileName().toString();
+        return file.getParent()
+                   .resolve(filename.replaceFirst("\\.class$", ".smap"));
+    }
+
+    private static Path testRoot() {
+        Path p = Paths.get(Utils.TEST_SRC);
+        while (!Files.exists(p.resolve("TEST.ROOT"))) {
+            p = p.getParent();
+        }
+        return p;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/TestSequence.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.util.Collection;
+
+public class TestSequence extends MlvmTest {
+
+    private Collection<Class<?>> testClasses;
+    private boolean abortOnFirstFailure;
+
+    TestSequence(Collection<Class<?>> testClasses, boolean abortOnFirstFailure) {
+        this.testClasses = testClasses;
+        this.abortOnFirstFailure = abortOnFirstFailure;
+    }
+
+    @Override
+    public boolean run() throws Exception {
+        boolean areSomeTestsFailed = false;
+        Throwable exception = null;
+        for (Class<?> c : this.testClasses) {
+            boolean hasTestPassed;
+            try {
+                hasTestPassed = MlvmTestExecutor.runMlvmTest(c);
+            } catch (Throwable e) {
+                hasTestPassed = false;
+                if (exception == null) {
+                    exception = e;
+                }
+            }
+            if (!hasTestPassed) {
+                if (this.abortOnFirstFailure) {
+                    if (exception != null) {
+                        Env.throwAsUncheckedException(exception);
+                    }
+                    return false;
+                } else {
+                    areSomeTestsFailed = true;
+                }
+            }
+        }
+        if (exception != null) {
+            Env.throwAsUncheckedException(exception);
+        }
+        return !areSomeTestsFailed;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/WhiteBoxHelper.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * WhiteBoxHelper class obtains a MethodHandle to a method defined in sun.hotspot.WhiteBox class.
+ * If WhiteBox is not available or cannot be initialized, or the method is not available,
+ * it throws an appropriate exception.
+ *
+ * This class was introduced to avoid "hard link" to WhiteBox.
+ *
+ */
+public class WhiteBoxHelper {
+
+    /**
+     * Obtains {@link java.lang.invoke.MethodHandle} to a method in sun.hotspot.WhiteBox class.
+     * If there is an error obtaining method handle, an exception is thrown.
+     *
+     * @param name Method name
+     * @type Method type
+     * @return {@link java.lang.invoke.MethodHandle} to the method. You can call it directly, WhiteBox instance is already bound to the handle.
+     * @throws IllegalAccessException if method cannot be accessed (see {@link java.lang.invoke.MethodHandles.Lookup#findStatic()} for details)
+     * @throws NoSuchMethodException if method cannot be found (see {@link java.lang.invoke.MethodHandles.Lookup#findStatic()} for details)
+     * @throws ClassNotFoundException if WhiteBox class cannot be loaded
+     * @throws InvocationTargetException if WhiteBox.getWhiteBox() method throws exception for some reason
+     */
+    public static MethodHandle getMethod(String name, MethodType type)
+            throws IllegalAccessException, NoSuchMethodException, ClassNotFoundException, InvocationTargetException {
+
+        Class<?> wbClass = Class.forName("sun.hotspot.WhiteBox");
+        MethodHandles.Lookup lu = MethodHandles.lookup();
+        MethodHandle getWB = lu.findStatic(wbClass, "getWhiteBox", MethodType.methodType(wbClass));
+        Object wb;
+        try {
+            wb = getWB.invoke();
+        } catch (Throwable e) {
+            throw new InvocationTargetException(e, "Can't obtain WhiteBox instance");
+        }
+        return lu.findVirtual(wbClass, name, type).bindTo(wb);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/ArgumentHandler.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share.jdi;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import vm.mlvm.share.jpda.Debuggee;
+import vm.share.options.OptionDefinition;
+import vm.share.options.OptionSupport;
+
+public class ArgumentHandler extends nsk.share.jdi.ArgumentHandler {
+
+    public ArgumentHandler(String[] args) {
+        super(args);
+    }
+
+    @Override
+    protected boolean checkOption(String option, String value) {
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/BreakpointInfo.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share.jdi;
+
+import java.util.List;
+
+import vm.mlvm.share.jpda.StratumInfo;
+
+import com.sun.jdi.request.BreakpointRequest;
+
+public class BreakpointInfo {
+    public static enum Type {
+        /** set breakpoint via BreakpointRequest */
+        EXPLICIT,
+        /**
+         * don't set JDI breakpoint, verify that we can reach the location
+         * via stepping
+         */
+        IMPLICIT
+    };
+
+    // Initial information
+    public Type type = Type.EXPLICIT;
+    public String className = "";
+    public final String methodName;
+    public int methodLine = 0;
+
+    /** Breakpoint stratum (JSR-045). null == default stratum */
+    public StratumInfo stratumInfo = null;
+
+    /**
+     * How many times this breakpoint should be hit. null == any number of
+     * hits
+     */
+    public Integer requiredHits = null;
+
+    /** How many steps do via StepRequest after reaching the breakpoint */
+    public int stepsToTrace = 0;
+
+    /** Conditional breakpoints should not be enabled by default */
+    public final boolean isConditional;
+
+    /** Sub-breakpoints */
+    public List<BreakpointInfo> subBreakpoints = null;
+
+    // Fields below are filled in by debugger
+    public long bci = -1;
+    public BreakpointRequest bpReq = null;
+    public int hits = 0;
+
+    public BreakpointInfo(String methodName) {
+        this(methodName, false);
+    }
+
+    public BreakpointInfo(String methodName, boolean isConditional) {
+        this.methodName = methodName;
+        this.isConditional = isConditional;
+    }
+
+    public boolean isHit() {
+        if (requiredHits == null) {
+            return hits > 0;
+        } else {
+            return hits == requiredHits;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return className + "." + methodName + ":" + methodLine + "[bci=" + bci + ",bp=" + bpReq + "]";
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/IndyDebuggee.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share.jdi;
+
+import vm.mlvm.share.jpda.INDIFY_SDE_DebuggeeBase;
+
+public class IndyDebuggee extends INDIFY_SDE_DebuggeeBase {
+
+    public static void main(String... args) throws Throwable { launch(new ArgumentHandler(args)); }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/JDIBreakpointTest.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,512 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share.jdi;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import nsk.share.jdi.Binder;
+import nsk.share.jdi.Debugee;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.mlvm.share.jpda.StratumUtils;
+import vm.share.options.Option;
+
+import com.sun.jdi.AbsentInformationException;
+import com.sun.jdi.IncompatibleThreadStateException;
+import com.sun.jdi.LocalVariable;
+import com.sun.jdi.Location;
+import com.sun.jdi.Method;
+import com.sun.jdi.ReferenceType;
+import com.sun.jdi.StackFrame;
+import com.sun.jdi.ThreadReference;
+import com.sun.jdi.Value;
+import com.sun.jdi.VirtualMachine;
+import com.sun.jdi.event.BreakpointEvent;
+import com.sun.jdi.event.ClassPrepareEvent;
+import com.sun.jdi.event.Event;
+import com.sun.jdi.event.EventIterator;
+import com.sun.jdi.event.EventQueue;
+import com.sun.jdi.event.EventSet;
+import com.sun.jdi.event.StepEvent;
+import com.sun.jdi.event.VMDisconnectEvent;
+import com.sun.jdi.request.BreakpointRequest;
+import com.sun.jdi.request.ClassPrepareRequest;
+import com.sun.jdi.request.EventRequest;
+import com.sun.jdi.request.EventRequestManager;
+import com.sun.jdi.request.StepRequest;
+
+/**
+ * Option value syntax:
+ *
+ * <pre>
+ * breakpoints        := breakpoint breakpoints?
+ * breakpoint         := implicitOpt? methodName options? stratum? subBreakpoints?
+ *
+ * implicitOpt        := "~"
+ *
+ * methodName         := STRING
+ * methodName         := className "." STRING
+ * className          := STRING
+ *
+ * options            :=
+ * options            := ":" option options
+ * option             := lineOption | requiredHitsOption | stepsToTraceOption
+ * lineOption         := "L" INTEGER                                                     // Line number
+ * requiredHitsOption := "H" INTEGER | "H*"                                              // Required number of hits
+ * stepsToTraceOption  := "S" INTEGER                                                    // Steps to trace when this breakpoint is hit
+ *
+ * stratum            := "/" stratumName "=" stratumSourceName ":" stratumSourceLine     // Also check stratum information when this breakpoint is hit
+ * stratumName        := STRING
+ * stratumSourceName  := STRING
+ * stratumSourceLine  := INTEGER
+ *
+ * subBreakpoints := "=>(" breakpoints ")"                                               // subBreakpoints are only set when its main breakpoint is hit.
+ * </pre>
+ */
+
+public abstract class JDIBreakpointTest extends MlvmTest {
+
+    @Option(name="debugger.debuggeeClass", default_value="", description="Debuggee class name")
+    public String _debuggeeClass = "DEBUGGEE-CLASS-NOT-DEFINED";
+
+    @Option(name="debugger.terminateWhenAllBPHit", default_value="", description="Hang up in specified point")
+    public boolean _terminateWhenAllBreakpointsHit;
+
+    protected static int _jdiEventWaitTimeout = 3000;
+
+    private static final int MAX_EVENT_COUNT = 50000;
+
+    private static final int SHORT_STACK_TRACE_FRAMES_NUM = 2;
+
+    protected VirtualMachine _vm;
+    protected EventQueue _eventQueue;
+
+    private abstract static class BreakpointListIterator {
+        List<BreakpointInfo> _biList;
+
+        public BreakpointListIterator(List<BreakpointInfo> biList) {
+            _biList = biList;
+        }
+
+        public Object go() throws Throwable {
+            return iterate(_biList);
+        }
+
+        public Object iterate(List<BreakpointInfo> biList) throws Throwable {
+            for ( BreakpointInfo bi : biList ) {
+                Object result = apply(bi);
+                if ( result != null )
+                    return result;
+
+                if ( bi.subBreakpoints != null ) {
+                    result = iterate(bi.subBreakpoints);
+                    if ( result != null )
+                        return result;
+                }
+            }
+
+            return null;
+        }
+
+        protected abstract Object apply(BreakpointInfo bi) throws Throwable;
+    }
+
+    protected String getDebuggeeClassName() throws Throwable {
+        String debuggeeClass = _debuggeeClass.trim();
+        if ( debuggeeClass == null || debuggeeClass.isEmpty() )
+            throw new Exception("Please specify debuggee class name");
+
+        return debuggeeClass;
+    }
+
+    protected abstract List<BreakpointInfo> getBreakpoints(String debuggeeClassName);
+
+    protected boolean getTerminateWhenAllBPHit() {
+        return _terminateWhenAllBreakpointsHit;
+    }
+
+    protected void breakpointEventHook(BreakpointEvent bpe) {}
+    protected void stepEventHook(StepEvent se) {}
+    protected void classPrepareEventHook(ClassPrepareEvent cpe) {}
+    protected void eventHook(Event e) {}
+
+    @Override
+    public boolean run() throws Throwable {
+        JDIBreakpointTest._jdiEventWaitTimeout = getArgumentParser().getWaitTime() * 60000;
+
+        boolean terminateWhenAllBPHit = getTerminateWhenAllBPHit();
+
+        final String debuggeeClass = getDebuggeeClassName();
+
+        Binder binder = new Binder((ArgumentHandler) getArgumentParser(), getLog());
+
+        Debugee debuggee = binder.bindToDebugee(debuggeeClass);
+        if (debuggee == null)
+            throw new Exception("Can't launch debuggee");
+
+        debuggee.redirectOutput(getLog());
+
+        _vm = debuggee.VM();
+        _eventQueue = _vm.eventQueue();
+        EventRequestManager erm = _vm.eventRequestManager();
+
+        // Breakpoints
+
+        final List<BreakpointInfo> breakpoints = getBreakpoints(debuggeeClass);
+
+        final HashMap<String, ClassPrepareRequest> bpClassNames = new HashMap<String, ClassPrepareRequest>();
+
+        new BreakpointListIterator(breakpoints) {
+            @Override protected Object apply(BreakpointInfo bi) {
+                if ( bi.className.isEmpty() )
+                    bi.className = debuggeeClass;
+                bpClassNames.put(bi.className, null);
+                return null;
+            }
+        }.go();
+
+        for (String className : bpClassNames.keySet()) {
+            Env.traceNormal("Requesting ClassPrepareEvent for [" + className + "]");
+
+            ClassPrepareRequest cpReq = erm.createClassPrepareRequest();
+            cpReq.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
+            cpReq.addClassFilter(className);
+            cpReq.enable();
+
+            bpClassNames.put(className, cpReq);
+        }
+
+        _vm.resume();
+
+        StepRequest currentStepReq = null;
+        int stepsToTrace = 0;
+        int stepCount = 0;
+        boolean stop = false;
+
+        EVENT_LOOP: while (!stop) {
+            EventIterator ei = getNextEvent();
+
+            Map<Location, ThreadReference> currentLocations = new HashMap<Location, ThreadReference>();
+
+            while (ei.hasNext()) {
+                Event e = ei.next();
+                Env.traceVerbose("Got JDI event: " + e);
+                eventHook(e);
+                if (e instanceof VMDisconnectEvent)
+                    break EVENT_LOOP;
+
+                ThreadReference thread = null;
+                Location location = null;
+                boolean fullStackTrace = false;
+
+                if (e instanceof ClassPrepareEvent) {
+                    ClassPrepareEvent cpe = (ClassPrepareEvent) e;
+                    classPrepareEventHook(cpe);
+
+                    ReferenceType classRef = cpe.referenceType();
+
+                    setBreakpoints(erm, breakpoints, classRef);
+
+                } else if (e instanceof BreakpointEvent) {
+
+                    BreakpointEvent bpe = (BreakpointEvent) e;
+                    breakpointEventHook(bpe);
+                    thread = bpe.thread();
+                    location = bpe.location();
+                    fullStackTrace = true;
+
+                } else if (e instanceof StepEvent) {
+
+                    StepEvent se = (StepEvent) e;
+                    stepEventHook(se);
+                    thread = se.thread();
+                    location = se.location();
+                }
+
+                if (thread != null) {
+                    try {
+                        Env.traceDebug("Event thread suspends: " + thread.suspendCount());
+                        if (thread.suspendCount() > 0)
+                            Env.traceDebug("Stack trace:" + getStackTraceStr(thread.frames(), fullStackTrace));
+
+                        currentLocations.put(location, thread);
+
+                    } catch (IncompatibleThreadStateException ex) {
+                        Env.traceNormal("Exception: ", ex);
+                    }
+                }
+
+                if (++stepCount > MAX_EVENT_COUNT) {
+                    Env.display("Maximum number of events reached ("
+                            + MAX_EVENT_COUNT + ") for this test. Exiting.");
+                    stop = true;
+                }
+            }
+
+            for (Map.Entry<Location, ThreadReference> e : currentLocations.entrySet()) {
+                final Location location = e.getKey();
+                final ThreadReference thread = e.getValue();
+
+                BreakpointInfo bpInfo = (BreakpointInfo) new BreakpointListIterator(breakpoints) {
+                    @Override protected Object apply(BreakpointInfo bi) throws Throwable {
+                        if ( location.method().name().equals(bi.methodName) && location.codeIndex() == bi.bci )
+                            return bi;
+                        else
+                            return null;
+                    }
+                }.go();
+
+                int s = 0;
+
+                if (bpInfo != null) {
+                    Env.traceNormal("Execution hit our breakpoint: [" + bpInfo.methodName + ":" + bpInfo.methodLine + "] on step " + stepCount);
+
+                    bpInfo.hits++;
+                    s = bpInfo.stepsToTrace;
+
+                    if (bpInfo.stratumInfo != null) {
+                        if ( ! StratumUtils.checkStratum(location, bpInfo.stratumInfo) )
+                            markTestFailed("Stratum " + bpInfo.stratumInfo + " mismatch");
+                    }
+
+                    if ( bpInfo.subBreakpoints != null ) {
+                        Env.traceNormal("Enabling sub-breakpoints");
+                        for ( BreakpointInfo subBP : bpInfo.subBreakpoints ) {
+                            if (  subBP.type == BreakpointInfo.Type.IMPLICIT )
+                                continue;
+
+                            if ( subBP.bpReq == null ) {
+                                Env.complain("Breakpoint " + subBP + " was not set. Skipping.");
+                                continue;
+                            }
+
+                            if ( subBP.bpReq.isEnabled() ) {
+                                Env.traceVerbose("Breakpoint " + subBP + " is already enabled. Skipping.");
+                                continue;
+                            }
+
+                            subBP.bpReq.enable();
+                        }
+                    }
+
+                    if ( terminateWhenAllBPHit && areAllBreakpointsHit(breakpoints) ) {
+                        Env.traceNormal("All breakpoints are hit. Terminating.");
+                        stop = true;
+                        s = 0;
+                    }
+                }
+
+                if (s > 0) {
+                    Env.traceVerbose("Stepping " + s + " step or breakpoint events from here");
+                    stepsToTrace = s;
+
+                    if (currentStepReq == null) {
+                        currentStepReq = erm.createStepRequest(thread, StepRequest.STEP_LINE, StepRequest.STEP_INTO);
+                        currentStepReq.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
+                        currentStepReq.enable();
+                    }
+                } else {
+                    if (currentStepReq != null && --stepsToTrace <= 0) {
+                        Env.traceVerbose("Continue without stepping");
+                        erm.deleteEventRequest(currentStepReq);
+                        currentStepReq = null;
+                    }
+                }
+            }
+
+            Env.traceDebug("Resuming execution");
+            _vm.resume();
+        }
+
+        new BreakpointListIterator(breakpoints) {
+            @Override protected Object apply(BreakpointInfo bi) {
+                if (!bi.isHit()) {
+                        markTestFailed("Breakpoint for method "
+                                     + bi.methodName
+                                     + ": required hits "
+                                     + (bi.requiredHits == null ? "> 0" : (" = " + bi.requiredHits))
+                                     + "; actual hits = " + bi.hits);
+                } else {
+                    Env.display("Breakpoint for method " + bi.methodName + " was hit " + bi.hits + " times. OK.");
+                }
+
+                return null;
+            }
+        }.go();
+
+        if (!debuggee.terminated())
+            debuggee.endDebugee();
+
+        debuggee.waitFor();
+        return true;
+    }
+
+    private void setBreakpoints(
+            final EventRequestManager erm,
+            final List<BreakpointInfo> breakpoints,
+            final ReferenceType classRef)
+            throws Throwable {
+
+        Env.traceNormal("Setting breakpoints for class [" + classRef + "]");
+
+        new BreakpointListIterator(breakpoints) {
+            @Override
+            protected Object apply(BreakpointInfo bpInfo) throws Throwable {
+                if ( bpInfo.className.equals(classRef.name()) ) {
+
+                    List<Method> methods = classRef.methodsByName(bpInfo.methodName);
+                    if (methods.size() == 0)
+                        throw new Exception("No method named [" + bpInfo.methodName + "]");
+
+                    Method method = (Method) methods.get(0);
+                    List<Location> allLineLocations = method.allLineLocations();
+
+                    Env.traceVerbose("Method [" + method.name() + "] locations: " + Arrays.toString(allLineLocations.toArray()));
+
+                    if (bpInfo.methodLine > allLineLocations.size())
+                        throw new Exception("TEST BUG: no breakpoint line " + bpInfo.methodLine);
+
+                    Location lineLocation = (Location) allLineLocations.get(bpInfo.methodLine);
+                    bpInfo.bci = lineLocation.codeIndex();
+                    bpInfo.hits = 0;
+
+                    if ( bpInfo.type == BreakpointInfo.Type.EXPLICIT ) {
+                        BreakpointRequest bpReq = erm.createBreakpointRequest(lineLocation);
+                        // bpReq.addThreadFilter(mainThread);
+                        bpReq.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
+
+                        if ( ! bpInfo.isConditional )
+                            bpReq.enable();
+
+                        bpInfo.bpReq = bpReq;
+                        Env.traceNormal("Breakpoint request for [" + method.name() + "]: " + bpReq);
+                    } else {
+                        Env.traceNormal("Implicit breakpoint  " + "[" + bpInfo.methodName + ":" + bpInfo.methodLine + "]");
+                    }
+
+                }
+
+                return null;
+            }
+        }.go();
+    }
+
+    private static boolean areAllBreakpointsHit(List<BreakpointInfo> breakpoints) throws Throwable {
+        return null == new BreakpointListIterator(breakpoints) {
+            @Override
+            protected Object apply(BreakpointInfo bi) throws Throwable {
+                return bi.isHit() ? null : bi;
+            }
+        }.go();
+    }
+
+    public static String getStackTraceStr(List<StackFrame> frames, boolean full)
+            throws AbsentInformationException {
+        StringBuffer buf = new StringBuffer();
+
+        int frameNum = 0;
+        for (StackFrame f : frames) {
+            Location l = f.location();
+
+            buf.append(String.format("#%-4d", frameNum))
+               .append(l.method())
+               .append("\n        source: ")
+               .append(l.sourcePath())
+               .append(":")
+               .append(l.lineNumber())
+               .append("; bci=")
+               .append(l.codeIndex())
+               .append("\n        class:  ")
+               .append(l.declaringType())
+               .append("\n        strata: ")
+               .append(StratumUtils.getStrataStr(f))
+               .append("\n        locals: ");
+
+            try {
+                for (Map.Entry<LocalVariable, Value> m : f.getValues(f.visibleVariables()).entrySet()) {
+                    LocalVariable lv = m.getKey();
+                    buf.append("\n            ");
+
+                    if (lv.isArgument()) {
+                        buf.append("[arg] ");
+                    }
+                    buf.append(lv.name())
+                       .append(" (")
+                       .append(lv.typeName())
+                       .append(") = [")
+                       .append(m.getValue())
+                       .append("]; ");
+                }
+            } catch (AbsentInformationException e) {
+                buf.append("NO INFORMATION")
+                   .append("\n        arguments: ");
+
+                List<Value> argumentValues = f.getArgumentValues();
+
+                if (argumentValues == null || argumentValues.size() == 0) {
+                    buf.append("none");
+                } else {
+                    int n = 0;
+                    for (Value v : argumentValues) {
+                        buf.append("\n            arg");
+
+                        if (v == null) {
+                            buf.append(n)
+                               .append(" [null]");
+                        } else {
+                            buf.append(n)
+                               .append(" (")
+                               .append(v.type())
+                               .append(") = [")
+                               .append(v)
+                               .append("]; ");
+                        }
+                        n++;
+                    }
+                }
+            }
+
+            buf.append("\n\n");
+
+            ++frameNum;
+            if (!full && frameNum >= SHORT_STACK_TRACE_FRAMES_NUM) {
+                buf.append("...\n");
+                break;
+            }
+        }
+        return buf.toString();
+    }
+
+    protected EventIterator getNextEvent() throws Throwable {
+        EventSet eventSet = _eventQueue.remove(_jdiEventWaitTimeout);
+        if (eventSet == null)
+            throw new Exception("Timed out while waiting for an event");
+
+        return eventSet.eventIterator();
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jdi/MHDebuggee.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share.jdi;
+
+import vm.mlvm.share.jpda.SDE_MHDebuggeeBase;
+
+public class MHDebuggee extends SDE_MHDebuggeeBase {
+
+    public static void main(String... args) { launch(new ArgumentHandler(args)); }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/Debuggee.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share.jpda;
+
+import vm.mlvm.share.Env;
+import vm.mlvm.share.MlvmTest;
+import vm.share.options.Option;
+
+public abstract class Debuggee extends MlvmTest {
+
+    @Option(name="debuggee.iterations", default_value="1", description="Iterations to run on debuggee")
+    public long _iterations = 1;
+
+    @Option(name="debuggee.hangAt", default_value="", description="Hang up in specified point")
+    public String _hangAt = "";
+
+    static {
+        setName("Debuggee");
+    }
+
+    private boolean _isWarmingUp;
+
+    public final boolean isWarmingUp() {
+        return _isWarmingUp;
+    }
+
+    public final long getWarmupsCount() {
+        return _iterations;
+    }
+
+    /**
+     * Used in static methods for getting access to Debuggee instance
+     *
+     * @return The current debuggee instance (there should be only one)
+     */
+    public static Debuggee getDebuggeeInstance() {
+        return (Debuggee) MlvmTest.getInstance();
+    }
+
+    @Override
+    public boolean run() throws Throwable {
+        startUp();
+        boolean result = false;
+        try {
+
+            _isWarmingUp = true;
+            Env.traceNormal("Warming up (" + _iterations + " iterations)");
+            for (long w = _iterations - 1; w > 0; w--)
+                warmUp();
+            _isWarmingUp = false;
+
+            Env.traceNormal("Starting main test");
+            result = runDebuggee();
+
+        } finally {
+            tearDown();
+        }
+
+        return result;
+    }
+
+    protected void startUp() throws Throwable {
+    }
+
+    protected void warmUp() throws Throwable {
+    }
+
+    protected abstract boolean runDebuggee() throws Throwable;
+
+    protected void tearDown() throws Throwable {
+    }
+
+    public final void hangUpIfNeeded(String at) throws InterruptedException {
+        if (!_isWarmingUp && at.equals(_hangAt)) {
+            Env.traceNormal("Hanging at " + at);
+            hangupImpl();
+        } else {
+            if ( isWarmingUp() )
+                Env.traceDebug("Passing " + at);
+            else
+                Env.traceNormal("Passing " + at);
+        }
+    }
+
+    protected void hangupImpl() throws InterruptedException {
+        for (;;)
+            Thread.sleep(60000);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/INDIFY_SDE_DebuggeeBase.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share.jpda;
+
+import java.lang.invoke.CallSite;
+import java.lang.invoke.ConstantCallSite;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+import java.util.Arrays;
+
+import vm.mlvm.share.Env;
+import vm.mlvm.share.Stratum;
+
+@Stratum(stratumName="Logo", stratumSourceFileName="INDIFY_SDE_DebuggeeBase.logo")
+public class INDIFY_SDE_DebuggeeBase extends Debuggee {
+
+    private static MethodType MT_bootstrap() {
+        return MethodType.methodType(Object.class, Object.class, Object.class, Object.class);
+    }
+
+    private static MethodHandle MH_bootstrap() throws NoSuchMethodException, IllegalAccessException {
+        return MethodHandles.lookup().findStatic(
+                INDIFY_SDE_DebuggeeBase.class, "bootstrap", MT_bootstrap());
+    }
+
+    private static MethodType MT_target() {
+        return MethodType.methodType(void.class, String.class);
+    }
+
+    private static MethodHandle INDY_call;
+
+    private static MethodHandle INDY_call() throws Throwable {
+        if (INDY_call != null)
+            return INDY_call;
+
+        return ((CallSite) MH_bootstrap().invokeWithArguments(
+                MethodHandles.lookup(), "hello", MT_target())).dynamicInvoker();
+    }
+
+    private static Object bootstrap(Object l, Object n, Object t) throws Throwable {
+Stratum_Logo_30_BOOTSTRAP:
+        Env.traceNormal("BSM called: " + Arrays.asList(new Object[] { l, n, t }));
+        getDebuggeeInstance().hangUpIfNeeded("bootstrap");
+        return new ConstantCallSite(MethodHandles.lookup().findStatic(
+                INDIFY_SDE_DebuggeeBase.class, "target", MT_target()));
+    }
+
+    public static void indyWrapper(String s) throws Throwable {
+Stratum_Logo_20_INDY:
+        INDY_call().invokeExact(s);
+    }
+
+    public static void target(String s) throws Throwable {
+        Debuggee d;
+Stratum_Logo_40_TARGET:
+        d = getDebuggeeInstance();
+        if ( d.isWarmingUp() )
+            Env.traceDebug("Target called. Argument: [" + s + "]");
+        else
+            Env.traceNormal("Target called. Argument: [" + s + "]");
+        d.hangUpIfNeeded("target");
+    }
+
+    public static void stop() throws Throwable {
+Stratum_Logo_50_END:
+        getDebuggeeInstance().hangUpIfNeeded("stop");
+    }
+
+    @Override
+    protected void warmUp() throws Throwable {
+        indyWrapper("warming up");
+    }
+
+    @Override
+    public boolean runDebuggee() throws Throwable {
+Stratum_Logo_10_BEGIN:
+        indyWrapper("hello from main!");
+        stop();
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/SDE_MHDebuggeeBase.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share.jpda;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import vm.mlvm.meth.share.Argument;
+import vm.mlvm.meth.share.MHTransformationGen;
+import vm.mlvm.meth.share.RandomArgumentsGen;
+import vm.mlvm.meth.share.transform.v2.MHMacroTF;
+import vm.mlvm.share.Env;
+import vm.mlvm.share.Stratum;
+
+@Stratum(stratumName="Logo", stratumSourceFileName="SDE_MHDebuggeeBase.logo")
+public class SDE_MHDebuggeeBase extends Debuggee {
+
+    private static final int ARG_NUM = 0;
+
+    private MethodHandle _mh;
+    public int _mhInvoked;
+    public int _mhTargetInvoked;
+    public int _plainInvoked;
+    public int _plainTargetInvoked;
+
+    public Object plainTarget(int i, String s, Float f) throws Throwable {
+Stratum_Logo_50_PLAIN:
+        _plainTargetInvoked++;
+        hangUpIfNeeded("plainTarget");
+        return null;
+    }
+
+    private static Float f = 1.0F;
+
+    public Object warmupPlain() throws Throwable {
+        return plainTarget(1, "abc", f);
+    }
+
+    public Object invokePlain() throws Throwable {
+        Object o;
+Stratum_Logo_40_INVOKE_PLAIN:
+        o = plainTarget(1, "abc", f);
+        _plainInvoked++;
+        return o;
+    }
+
+    public Object mhTarget(int i, String s, Float f) throws Throwable {
+Stratum_Logo_30_MH:
+        hangUpIfNeeded("mhTarget");
+        _mhTargetInvoked++;
+        return null;
+    }
+
+    public Object warmupMH() throws Throwable {
+        return _mh.invokeExact();
+    }
+
+    public Object invokeMH() throws Throwable {
+        Object o;
+Stratum_Logo_20_INVOKE_MH:
+        o = _mh.invokeExact();
+        _mhInvoked++;
+        return o;
+    }
+
+    public void stop() throws InterruptedException {
+Stratum_Logo_60_END:
+        hangUpIfNeeded("stop");
+    }
+
+    @Override
+    public void startUp() throws Throwable {
+        final MethodHandle mh = MethodHandles.lookup().findVirtual(
+                SDE_MHDebuggeeBase.class,
+                "mhTarget",
+                MethodType.methodType(Object.class, int.class, String.class,
+                        Float.class));
+
+        MHMacroTF sequence = MHTransformationGen.createSequence(
+                new Argument(Object.class, null), this, mh,
+                RandomArgumentsGen.createRandomArgs(true, mh.type()));
+
+        MHTransformationGen.transformToMatchArgsNum(sequence, ARG_NUM, ARG_NUM);
+
+        _mh = sequence.computeInboundCall().getTargetMH();
+    }
+
+    @Override
+    public void warmUp() throws Throwable {
+        warmupMH();
+        warmupPlain();
+    }
+
+    @Override
+    public boolean runDebuggee() throws Throwable {
+Stratum_Logo_10_BEGIN:
+        invokeMH();
+        invokePlain();
+        stop();
+
+        Env.traceNormal("MH target invoked = " + _mhTargetInvoked + "\n"
+                      + "MH invoked = " + _mhInvoked + "\n"
+                      + "Plain target invoked = " + _plainTargetInvoked + "\n"
+                      + "Plain invoked = " + _plainInvoked);
+
+        long targetInvocationCount = getWarmupsCount();
+        return _mhInvoked == 1 && _plainInvoked == 1
+                && _mhTargetInvoked == targetInvocationCount
+                && _plainTargetInvoked == targetInvocationCount;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/StratumInfo.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share.jpda;
+
+public class StratumInfo {
+    public final String stratum;
+    public final String stratumSourceName;
+    public final int stratumSourceLine;
+
+    public StratumInfo(String stratum, String stratumSourceName, int stratumSourceLine) {
+        this.stratum = stratum;
+        this.stratumSourceName = stratumSourceName;
+        this.stratumSourceLine = stratumSourceLine;
+    }
+
+    @Override
+    public String toString() {
+        return this.stratum + "=[" + this.stratumSourceName + ":" + this.stratumSourceLine + "]";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/jpda/StratumUtils.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.share.jpda;
+
+import nsk.share.ArgumentParser;
+import vm.mlvm.share.Env;
+
+import com.sun.jdi.AbsentInformationException;
+import com.sun.jdi.Location;
+import com.sun.jdi.ObjectReference;
+import com.sun.jdi.ReferenceType;
+import com.sun.jdi.StackFrame;
+
+public class StratumUtils {
+
+    public static boolean checkStratum(Location location, StratumInfo si) throws AbsentInformationException {
+        // Check stratum information
+        try {
+            Env.traceVerbose(String.format("Stratum [%s]: required=[%s:%d]", si.stratum, si.stratumSourceName, si.stratumSourceLine));
+            Env.traceVerbose(String.format("Default stratum: location=[%s:%d]", location.sourceName(), location.lineNumber()));
+
+            String stratumSourceName = location.sourceName(si.stratum);
+            int stratumSourceLine = location.lineNumber(si.stratum);
+            String stratumInfo = String.format("actual=[%s:%d]", stratumSourceName, stratumSourceLine);
+
+            if (stratumSourceName.equals(si.stratumSourceName) && stratumSourceLine == si.stratumSourceLine) {
+                Env.traceVerbose("Stratum matches: " + stratumInfo);
+                return true;
+            } else {
+                Env.complain("Stratum mismatch: " + stratumInfo);
+                return false;
+            }
+        } catch (AbsentInformationException e) {
+            Env.complain(e, "Strata information is absent. Available strata: " + getStrataStr(location.declaringType()));
+
+            return false;
+        }
+    }
+
+    public static StratumInfo parseStratumInfo(String stratumInfo) throws Exception {
+        int sourceNamePos = stratumInfo.indexOf('=');
+        int sourceLinePos = stratumInfo.indexOf(':');
+
+        if (sourceNamePos == -1 || sourceLinePos == -1 || sourceNamePos >= sourceLinePos) {
+            throw new ArgumentParser.BadOption("Wrong syntax of stratum information: [" + stratumInfo + "]");
+        }
+
+        return new StratumInfo(
+                stratumInfo.substring(0, sourceNamePos),
+                stratumInfo.substring(sourceNamePos + 1, sourceLinePos),
+                Integer.parseInt(stratumInfo.substring(sourceLinePos + 1)));
+    }
+
+    public static String getStrataStr(StackFrame sf) {
+        ObjectReference thisObject = sf.thisObject();
+        if (thisObject == null)
+            return "(no strata)";
+        return StratumUtils.getStrataStr(thisObject.referenceType());
+    }
+
+    public static String getStrataStr(ReferenceType ref) {
+        return ref.availableStrata() + " (" + ref + ")";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.c	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "jvmti.h"
+#include "agent_common.h"
+#include "JVMTITools.h"
+#include "jvmti_tools.h"
+#include "mlvmJvmtiUtils.h"
+
+void copyFromJString(JNIEnv * pEnv, jstring src, char ** dst) {
+    const char * pStr;
+        jsize len;
+
+    if ( ! NSK_VERIFY((pStr = NSK_CPP_STUB3(GetStringUTFChars, pEnv, src, NULL)) != NULL) ) {
+        return;
+    }
+
+    len = NSK_CPP_STUB2(GetStringUTFLength, pEnv, src) + 1;
+    *dst = malloc(len);
+    strncpy(*dst, pStr, len);
+
+    NSK_CPP_STUB3(ReleaseStringUTFChars, pEnv, src, pStr);
+}
+
+struct MethodName * getMethodName(jvmtiEnv * pJvmtiEnv, jmethodID method) {
+    char * szName;
+    char * szSignature;
+    jclass clazz;
+    struct MethodName * mn;
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB5(GetMethodName, pJvmtiEnv, method, &szName, NULL, NULL)) ) {
+        return NULL;
+    }
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(GetMethodDeclaringClass, pJvmtiEnv, method, &clazz)) ) {
+        NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, pJvmtiEnv, (void *) szName));
+        return NULL;
+    }
+
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB4(GetClassSignature, pJvmtiEnv, clazz, &szSignature, NULL)) ) {
+        NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, pJvmtiEnv, (void *) szName));
+        return NULL;
+    }
+
+    mn = malloc(sizeof(MethodNameStruct));
+    strncpy(mn->methodName, szName, sizeof(mn->methodName));
+    strncpy(mn->classSig, szSignature, sizeof(mn->classSig));
+
+    NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, pJvmtiEnv, (void *) szName));
+    NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, pJvmtiEnv, (void *) szSignature));
+    return mn;
+}
+
+char * locationToString(jvmtiEnv * pJvmtiEnv, jmethodID method, jlocation location) {
+    struct MethodName * pMN;
+    // gcc 7.3 claims that snprintf below can output between 6 and 531 bytes. Setting buffer size to 600.
+    char r[600];
+
+    pMN = getMethodName(pJvmtiEnv, method);
+    if ( ! pMN )
+        return strdup("NONE");
+
+    snprintf(r, sizeof(r), "%s .%s :%lx", pMN->classSig, pMN->methodName, (long) location);
+
+    free(pMN);
+
+    return strdup(r);
+}
+
+void * getTLS(jvmtiEnv * pJvmtiEnv, jthread thread, jsize sizeToAllocate) {
+    void * tls;
+    if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(GetThreadLocalStorage, pJvmtiEnv, thread, &tls)) )
+        return NULL;
+
+    if ( ! tls) {
+        if ( ! NSK_VERIFY((tls = malloc(sizeToAllocate)) != NULL) )
+            return NULL;
+
+        memset(tls, 0, sizeToAllocate);
+
+        if ( ! NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetThreadLocalStorage, pJvmtiEnv, thread, tls)) )
+            return NULL;
+    }
+
+    return tls;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/mlvmJvmtiUtils.h	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#ifndef MLVMJVMTIUTILS_H_
+#define MLVMJVMTIUTILS_H_
+
+#include "jvmti.h"
+
+void copyFromJString(JNIEnv * pEnv, jstring src, char ** dst);
+
+struct MethodName {
+    char methodName[256];
+    char classSig[256];
+} MethodNameStruct;
+
+struct MethodName * getMethodName(jvmtiEnv * pJvmtiEnv, jmethodID method);
+
+char * locationToString(jvmtiEnv * pJvmtiEnv, jmethodID method, jlocation location);
+
+void * getTLS(jvmtiEnv * pJvmtiEnv, jthread thread, jsize sizeToAllocate);
+
+#endif /* MLVMJVMTIUTILS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/Indify.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,1858 @@
+/*
+ * Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.tools;
+
+import java.util.*;
+import java.io.*;
+import java.lang.reflect.Modifier;
+import java.util.regex.*;
+
+/**
+ * Transform one or more class files to incorporate JSR 292 features,
+ * such as {@code invokedynamic}.
+ * <p>
+ * This is a standalone program in a single source file.
+ * In this form, it may be useful for test harnesses, small experiments, and javadoc examples.
+ * Copies of this file may show up in multiple locations for standalone usage.
+ * <p>
+ * Static private methods named MH_x and MT_x (where x is arbitrary)
+ * must be stereotyped generators of MethodHandle and MethodType
+ * constants.  All calls to them are transformed to {@code CONSTANT_MethodHandle}
+ * and {@code CONSTANT_MethodType} "ldc" instructions.
+ * The stereotyped code must create method types by calls to {@code methodType} or
+ * {@code fromMethodDescriptorString}.  The "lookup" argument must be created
+ * by calls to {@code java.lang.invoke.MethodHandles#lookup MethodHandles.lookup}.
+ * The class and string arguments must be constant.
+ * The following methods of {@code java.lang.invoke.MethodHandle.Lookup Lookup} are
+ * allowed for method handle creation: {@code findStatic}, {@code findVirtual},
+ * {@code findConstructor}, {@code findSpecial},
+ * {@code findGetter}, {@code findSetter},
+ * {@code findStaticGetter}, or {@code findStaticSetter}.
+ * The call to one of these methods must be followed immediately
+ * by an {@code areturn} instruction.
+ * The net result of the call to the MH_x or MT_x method must be
+ * the creation of a constant method handle.  Thus, replacing calls
+ * to MH_x or MT_x methods by {@code ldc} instructions should leave
+ * the meaning of the program unchanged.
+ * <p>
+ * Static private methods named INDY_x must be stereotyped generators
+ * of {@code invokedynamic} call sites.
+ * All calls to them must be immediately followed by
+ * {@code invokeExact} calls.
+ * All such pairs of calls are transformed to {@code invokedynamic}
+ * instructions.  Each INDY_x method must begin with a call to a
+ * MH_x method, which is taken to be its bootstrap method.
+ * The method must be immediately invoked (via {@code invokeGeneric}
+ * on constant lookup, name, and type arguments.  An object array of
+ * constants may also be appended to the {@code invokeGeneric call}.
+ * This call must be cast to {@code CallSite}, and the result must be
+ * immediately followed by a call to {@code dynamicInvoker}, with the
+ * resulting method handle returned.
+ * <p>
+ * The net result of all of these actions is equivalent to the JVM's
+ * execution of an {@code invokedynamic} instruction in the unlinked state.
+ * Running this code once should produce the same results as running
+ * the corresponding {@code invokedynamic} instruction.
+ * In order to model the caching behavior, the code of an INDY_x
+ * method is allowed to begin with getstatic, aaload, and if_acmpne
+ * instructions which load a static method handle value and return it
+ * if the value is non-null.
+ * <p>
+ * Example usage:
+ * <blockquote><pre>
+$ JAVA_HOME=(some recent OpenJDK 7 build)
+$ ant
+$ $JAVA_HOME/bin/java -cp build/classes indify.Indify --overwrite --dest build/testout build/classes/indify/Example.class
+$ $JAVA_HOME/bin/java -cp build/classes indify.Example
+MT = (java.lang.Object)java.lang.Object
+MH = adder(int,int)java.lang.Integer
+adder(1,2) = 3
+calling indy:  42
+$ $JAVA_HOME/bin/java -cp build/testout indify.Example
+(same output as above)
+ * </pre></blockquote>
+ * <p>
+ * Until the format of {@code CONSTANT_InvokeDynamic} entries is finalized,
+ * the {@code --transitionalJSR292} switch is recommended (and turned on by default).
+ * <p>
+ * A version of this transformation built on top of <a href="http://asm.ow2.org/">http://asm.ow2.org/</a> would be welcome.
+ */
+@SuppressWarnings("unchecked")
+public class Indify {
+    public static void main(String... av) throws IOException {
+        new Indify().run(av);
+    }
+
+    public File dest;
+    public String[] classpath = {"."};
+    public boolean keepgoing = false;
+    public boolean expandProperties = false;
+    public boolean overwrite = false;
+    public boolean quiet = false;
+    public boolean verbose = false;
+    public boolean transitionalJSR292 = true;  // default to false later
+    public boolean all = false;
+    public int verifySpecifierCount = -1;
+
+    public void run(String... av) throws IOException {
+        List<String> avl = new ArrayList<>(Arrays.asList(av));
+        parseOptions(avl);
+        if (avl.isEmpty())
+            throw new IllegalArgumentException("Usage: indify [--dest dir] [option...] file...");
+        if ("--java".equals(avl.get(0))) {
+            avl.remove(0);
+            try {
+                runApplication(avl.toArray(new String[0]));
+            } catch (Exception ex) {
+                if (ex instanceof RuntimeException)  throw (RuntimeException) ex;
+                throw new RuntimeException(ex);
+            }
+            return;
+        }
+        Exception err = null;
+        for (String a : avl) {
+            try {
+                indify(a);
+            } catch (Exception ex) {
+                if (err == null)  err = ex;
+                System.err.println("failure on "+a);
+                if (!keepgoing)  break;
+            }
+        }
+        if (err != null) {
+            if (err instanceof IOException)  throw (IOException) err;
+            throw (RuntimeException) err;
+        }
+    }
+
+    /** Execute the given application under a class loader which indifies all application classes. */
+    public void runApplication(String... av) throws Exception {
+        List<String> avl = new ArrayList<>(Arrays.asList(av));
+        String mainClassName = avl.remove(0);
+        av = avl.toArray(new String[0]);
+        Class<?> mainClass = Class.forName(mainClassName, true, makeClassLoader());
+        java.lang.reflect.Method main = mainClass.getMethod("main", String[].class);
+        main.invoke(null, (Object) av);
+    }
+
+    public void parseOptions(List<String> av) throws IOException {
+        for (; !av.isEmpty(); av.remove(0)) {
+            String a = av.get(0);
+            if (a.startsWith("-")) {
+                String a2 = null;
+                int eq = a.indexOf('=');
+                if (eq > 0) {
+                    a2 = maybeExpandProperties(a.substring(eq+1));
+                    a = a.substring(0, eq+1);
+                }
+                switch (a) {
+                case "--java":
+                    return;  // keep this argument
+                case "-d": case "--dest": case "-d=": case "--dest=":
+                    dest = new File(a2 != null ? a2 : maybeExpandProperties(av.remove(1)));
+                    break;
+                case "-cp": case "--classpath":
+                    classpath = maybeExpandProperties(av.remove(1)).split("["+File.pathSeparatorChar+"]");
+                    break;
+                case "-k": case "--keepgoing": case "--keepgoing=":
+                    keepgoing = booleanOption(a2);  // print errors but keep going
+                    break;
+                case "--expand-properties": case "--expand-properties=":
+                    expandProperties = booleanOption(a2);  // expand property references in subsequent arguments
+                    break;
+                case "--verify-specifier-count": case "--verify-specifier-count=":
+                    verifySpecifierCount = Integer.valueOf(a2);
+                    break;
+                case "--overwrite": case "--overwrite=":
+                    overwrite = booleanOption(a2);  // overwrite output files
+                    break;
+                case "--all": case "--all=":
+                    all = booleanOption(a2);  // copy all classes, even if no patterns
+                    break;
+                case "-q": case "--quiet": case "--quiet=":
+                    quiet = booleanOption(a2);  // less output
+                    break;
+                case "-v": case "--verbose": case "--verbose=":
+                    verbose = booleanOption(a2);  // more output
+                    break;
+                case "--transitionalJSR292": case "--transitionalJSR292=":
+                    transitionalJSR292 = booleanOption(a2);  // use older invokedynamic format
+                    break;
+                default:
+                    throw new IllegalArgumentException("unrecognized flag: "+a);
+                }
+                continue;
+            } else {
+                break;
+            }
+        }
+        if (dest == null && !overwrite)
+            throw new RuntimeException("no output specified; need --dest d or --overwrite");
+        if (expandProperties) {
+            for (int i = 0; i < av.size(); i++)
+                av.set(i, maybeExpandProperties(av.get(i)));
+        }
+    }
+
+    private boolean booleanOption(String s) {
+        if (s == null)  return true;
+        switch (s) {
+        case "true":  case "yes": case "1": return true;
+        case "false": case "no":  case "0": return false;
+        }
+        throw new IllegalArgumentException("unrecognized boolean flag="+s);
+    }
+
+    private String maybeExpandProperties(String s) {
+        if (!expandProperties)  return s;
+        Set<String> propsDone = new HashSet<>();
+        while (s.contains("${")) {
+            int lbrk = s.indexOf("${");
+            int rbrk = s.indexOf('}', lbrk);
+            if (rbrk < 0)  break;
+            String prop = s.substring(lbrk+2, rbrk);
+            if (!propsDone.add(prop))  break;
+            String value = System.getProperty(prop);
+            if (verbose)  System.err.println("expanding ${"+prop+"} => "+value);
+            if (value == null)  break;
+            s = s.substring(0, lbrk) + value + s.substring(rbrk+1);
+        }
+        return s;
+    }
+
+    public void indify(String a) throws IOException {
+        File f = new File(a);
+        String fn = f.getName();
+        if (fn.endsWith(".class") && f.isFile())
+            indifyFile(f, dest);
+        else if (fn.endsWith(".jar") && f.isFile())
+            indifyJar(f, dest);
+        else if (f.isDirectory())
+            indifyTree(f, dest);
+        else if (!keepgoing)
+            throw new RuntimeException("unrecognized file: "+a);
+    }
+
+    private void ensureDirectory(File dir) {
+        if (dir.mkdirs() && !quiet)
+            System.err.println("created "+dir);
+    }
+
+    public void indifyFile(File f, File dest) throws IOException {
+        if (verbose)  System.err.println("reading "+f);
+        ClassFile cf = new ClassFile(f);
+        Logic logic = new Logic(cf);
+        boolean changed = logic.transform();
+        logic.reportPatternMethods(quiet, keepgoing);
+        if (changed || all) {
+            File outfile;
+            if (dest != null) {
+                ensureDirectory(dest);
+                outfile = classPathFile(dest, cf.nameString());
+            } else {
+                outfile = f;  // overwrite input file, no matter where it is
+            }
+            cf.writeTo(outfile);
+            if (!quiet)  System.err.println("wrote "+outfile);
+        }
+    }
+
+    File classPathFile(File pathDir, String className) {
+        String qualname = className+".class";
+        qualname = qualname.replace('/', File.separatorChar);
+        return new File(pathDir, qualname);
+    }
+
+    public void indifyJar(File f, Object dest) throws IOException {
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+
+    public void indifyTree(File f, File dest) throws IOException {
+        if (verbose)  System.err.println("reading directory: "+f);
+        for (File f2 : f.listFiles(new FilenameFilter() {
+                public boolean accept(File dir, String name) {
+                    if (name.endsWith(".class"))  return true;
+                    if (name.contains("."))  return false;
+                    // return true if it might be a package name:
+                    return Character.isJavaIdentifierStart(name.charAt(0));
+                }})) {
+            if (f2.getName().endsWith(".class"))
+                indifyFile(f2, dest);
+            else if (f2.isDirectory())
+                indifyTree(f2, dest);
+        }
+    }
+
+    public ClassLoader makeClassLoader() {
+        return new Loader();
+    }
+    private class Loader extends ClassLoader {
+        Loader() {
+            this(Indify.class.getClassLoader());
+        }
+        Loader(ClassLoader parent) {
+            super(parent);
+        }
+        public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+            File f = findClassInPath(name);
+            if (f != null) {
+                try {
+                    Class<?> c = transformAndLoadClass(f);
+                    if (c != null) {
+                        if (resolve)  resolveClass(c);
+                        return c;
+                    }
+                } catch (Exception ex) {
+                    if (ex instanceof IllegalArgumentException)
+                        // pass error from reportPatternMethods
+                        throw (IllegalArgumentException) ex;
+                }
+            }
+            return super.loadClass(name, resolve);
+        }
+        private File findClassInPath(String name) {
+            for (String s : classpath) {
+                File f = classPathFile(new File(s), name);
+                if (f.exists() && f.canRead()) {
+                    return f;
+                }
+            }
+            return null;
+        }
+        protected Class<?> findClass(String name) throws ClassNotFoundException {
+            try {
+                return transformAndLoadClass(findClassInPath(name));
+            } catch (IOException ex) {
+                throw new ClassNotFoundException("IO error", ex);
+            }
+        }
+        private Class<?> transformAndLoadClass(File f) throws ClassNotFoundException, IOException {
+            if (verbose)  System.out.println("Loading class from "+f);
+            ClassFile cf = new ClassFile(f);
+            Logic logic = new Logic(cf);
+            boolean changed = logic.transform();
+            if (verbose && !changed)  System.out.println("(no change)");
+            logic.reportPatternMethods(!verbose, keepgoing);
+            byte[] bytes = cf.toByteArray();
+            return defineClass(null, bytes, 0, bytes.length);
+        }
+    }
+
+    private class Logic {
+        // Indify logic, per se.
+        ClassFile cf;
+        final char[] poolMarks;
+        final Map<Method,Constant> constants = new HashMap<>();
+        final Map<Method,String> indySignatures = new HashMap<>();
+        Logic(ClassFile cf) {
+            this.cf = cf;
+            poolMarks = new char[cf.pool.size()];
+        }
+        boolean transform() {
+            if (!initializeMarks())  return false;
+            if (!findPatternMethods())  return false;
+            Pool pool = cf.pool;
+            //for (Constant c : cp)  System.out.println("  # "+c);
+            for (Method m : cf.methods) {
+                if (constants.containsKey(m))  continue;  // don't bother
+                // Transform references.
+                int blab = 0;
+                for (Instruction i = m.instructions(); i != null; i = i.next()) {
+                    if (i.bc != opc_invokestatic)  continue;
+                    int methi = i.u2At(1);
+                    if (poolMarks[methi] == 0)  continue;
+                    Short[] ref = pool.getMemberRef((short)methi);
+                    Method conm = findMember(cf.methods, ref[1], ref[2]);
+                    if (conm == null)  continue;
+                    Constant con = constants.get(conm);
+                    if (con == null)  continue;
+                    if (blab++ == 0 && !quiet)
+                        System.err.println("patching "+cf.nameString()+"."+m);
+                    //if (blab == 1) { for (Instruction j = m.instructions(); j != null; j = j.next()) System.out.println("  |"+j); }
+                    if (con.tag == CONSTANT_InvokeDynamic ||
+                        con.tag == CONSTANT_InvokeDynamic_17) {
+                        // need to patch the following instruction too,
+                        // but there are usually intervening argument pushes too
+                        Instruction i2 = findPop(i);
+                        Short[] ref2 = null;
+                        short ref2i = 0;
+                        if (i2 != null && i2.bc == opc_invokevirtual &&
+                                poolMarks[(char)(ref2i = (short) i2.u2At(1))] == 'D')
+                            ref2 = pool.getMemberRef(ref2i);
+                        if (ref2 == null || !"invokeExact".equals(pool.getString(ref2[1]))) {
+                            System.err.println(m+": failed to create invokedynamic at "+i.pc);
+                            continue;
+                        }
+                        String invType = pool.getString(ref2[2]);
+                        String bsmType = indySignatures.get(conm);
+                        if (!invType.equals(bsmType)) {
+                            System.err.println(m+": warning: "+conm+" call type and local invoke type differ: "
+                                    +bsmType+", "+invType);
+                        }
+                        assert(i.len == 3 || i2.len == 3);
+                        if (!quiet)  System.err.println(i+" "+conm+";...; "+i2+" => invokedynamic "+con);
+                        int start = i.pc + 3, end = i2.pc;
+                        System.arraycopy(i.codeBase, start, i.codeBase, i.pc, end-start);
+                        i.forceNext(0);  // force revisit of new instruction
+                        i2.u1AtPut(-3, opc_invokedynamic);
+                        i2.u2AtPut(-2, con.index);
+                        i2.u2AtPut(0, (short)0);
+                        i2.u1AtPut(2, opc_nop);
+                        //System.out.println(new Instruction(i.codeBase, i2.pc-3));
+                    } else {
+                        if (!quiet)  System.err.println(i+" "+conm+" => ldc "+con);
+                        assert(i.len == 3);
+                        i.u1AtPut(0, opc_ldc_w);
+                        i.u2AtPut(1, con.index);
+                    }
+                }
+                //if (blab >= 1) { for (Instruction j = m.instructions(); j != null; j = j.next()) System.out.println("    |"+j); }
+            }
+            cf.methods.removeAll(constants.keySet());
+            return true;
+        }
+
+        // Scan forward from the instruction to find where the stack p
+        // below the current sp at the instruction.
+        Instruction findPop(Instruction i) {
+            //System.out.println("findPop from "+i);
+            Pool pool = cf.pool;
+            JVMState jvm = new JVMState();
+        decode:
+            for (i = i.clone().next(); i != null; i = i.next()) {
+                String pops = INSTRUCTION_POPS[i.bc];
+                //System.out.println("  "+i+" "+jvm.stack+" : "+pops.replace("$", " => "));
+                if (pops == null)  break;
+                if (jvm.stackMotion(i.bc))  continue decode;
+                if (pops.indexOf('Q') >= 0) {
+                    Short[] ref = pool.getMemberRef((short) i.u2At(1));
+                    String type = simplifyType(pool.getString(CONSTANT_Utf8, ref[2]));
+                    switch (i.bc) {
+                    case opc_getstatic:
+                    case opc_getfield:
+                    case opc_putstatic:
+                    case opc_putfield:
+                        pops = pops.replace("Q", type);
+                        break;
+                    default:
+                        if (!type.startsWith("("))
+                            throw new InternalError(i.toString());
+                        pops = pops.replace("Q$Q", type.substring(1).replace(")","$"));
+                        break;
+                    }
+                    //System.out.println("special type: "+type+" => "+pops);
+                }
+                int npops = pops.indexOf('$');
+                if (npops < 0)  throw new InternalError();
+                if (npops > jvm.sp())  return i;
+                List<Object> args = jvm.args(npops);
+                int k = 0;
+                for (Object x : args) {
+                    char have = (Character) x;
+                    char want = pops.charAt(k++);
+                    if (have == 'X' || want == 'X')  continue;
+                    if (have != want)  break decode;
+                }
+                if (pops.charAt(k++) != '$')  break decode;
+                args.clear();
+                while (k < pops.length())
+                    args.add(pops.charAt(k++));
+            }
+            System.err.println("*** bailout on jvm: "+jvm.stack+" "+i);
+            return null;
+        }
+
+        boolean findPatternMethods() {
+            boolean found = false;
+            for (char mark : "THI".toCharArray()) {
+                for (Method m : cf.methods) {
+                    if (!Modifier.isPrivate(m.access))  continue;
+                    if (!Modifier.isStatic(m.access))  continue;
+                    if (nameAndTypeMark(m.name, m.type) == mark) {
+                        Constant con = scanPattern(m, mark);
+                        if (con == null)  continue;
+                        constants.put(m, con);
+                        found = true;
+                    }
+                }
+            }
+            return found;
+        }
+
+        void reportPatternMethods(boolean quietly, boolean allowMatchFailure) {
+            if (!quietly && !constants.keySet().isEmpty())
+                System.err.println("pattern methods removed: "+constants.keySet());
+            for (Method m : cf.methods) {
+                if (nameMark(cf.pool.getString(m.name)) != 0 &&
+                    constants.get(m) == null) {
+                    String failure = "method has special name but fails to match pattern: "+m;
+                    if (!allowMatchFailure)
+                        throw new IllegalArgumentException(failure);
+                    else if (!quietly)
+                        System.err.println("warning: "+failure);
+                }
+            }
+            if (verifySpecifierCount >= 0) {
+                List<Object[]> specs = bootstrapMethodSpecifiers(false);
+                int specsLen = (specs == null ? 0 : specs.size());
+                if (specsLen != verifySpecifierCount) {
+                    throw new IllegalArgumentException("BootstrapMethods length is "+specsLen+" but should be "+verifySpecifierCount);
+                }
+            }
+        }
+
+        // mark constant pool entries according to participation in patterns
+        boolean initializeMarks() {
+            boolean changed = false;
+            for (;;) {
+                boolean changed1 = false;
+                int cpindex = -1;
+                for (Constant e : cf.pool) {
+                    ++cpindex;
+                    if (e == null)  continue;
+                    char mark = poolMarks[cpindex];
+                    if (mark != 0)  continue;
+                    switch (e.tag) {
+                    case CONSTANT_Utf8:
+                        mark = nameMark(e.itemString()); break;
+                    case CONSTANT_NameAndType:
+                        mark = nameAndTypeMark(e.itemIndexes()); break;
+                    case CONSTANT_Class: {
+                        int n1 = e.itemIndex();
+                        char nmark = poolMarks[(char)n1];
+                        if ("DJ".indexOf(nmark) >= 0)
+                            mark = nmark;
+                        break;
+                    }
+                    case CONSTANT_Field:
+                    case CONSTANT_Method: {
+                        Short[] n12 = e.itemIndexes();
+                        short cl = n12[0];
+                        short nt = n12[1];
+                        char cmark = poolMarks[(char)cl];
+                        if (cmark != 0) {
+                            mark = cmark;  // it is a java.lang.invoke.* or java.lang.* method
+                            break;
+                        }
+                        String cls = cf.pool.getString(CONSTANT_Class, cl);
+                        if (cls.equals(cf.nameString())) {
+                            switch (poolMarks[(char)nt]) {
+                            // it is a private MH/MT/INDY method
+                            case 'T': case 'H': case 'I':
+                                mark = poolMarks[(char)nt];
+                                break;
+                            }
+                        }
+                        break;
+                    }
+                    default:  break;
+                    }
+                    if (mark != 0) {
+                        poolMarks[cpindex] = mark;
+                        changed1 = true;
+                    }
+                }
+                if (!changed1)
+                    break;
+                changed = true;
+            }
+            return changed;
+        }
+        char nameMark(String s) {
+            if (s.startsWith("MT_"))                return 'T';
+            else if (s.startsWith("MH_"))           return 'H';
+            else if (s.startsWith("INDY_"))         return 'I';
+            else if (s.startsWith("java/lang/invoke/"))     return 'D';
+            else if (s.startsWith("java/lang/"))    return 'J';
+            return 0;
+        }
+        char nameAndTypeMark(Short[] n12) {
+            return nameAndTypeMark(n12[0], n12[1]);
+        }
+        char nameAndTypeMark(short n1, short n2) {
+            char mark = poolMarks[(char)n1];
+            if (mark == 0)  return 0;
+            String descr = cf.pool.getString(CONSTANT_Utf8, n2);
+            String requiredType;
+            switch (poolMarks[(char)n1]) {
+            case 'H': requiredType = "()Ljava/lang/invoke/MethodHandle;";  break;
+            case 'T': requiredType = "()Ljava/lang/invoke/MethodType;";    break;
+            case 'I': requiredType = "()Ljava/lang/invoke/MethodHandle;";  break;
+            default:  return 0;
+            }
+            if (descr.equals(requiredType))  return mark;
+            return 0;
+        }
+
+        private class JVMState {
+            final List<Object> stack = new ArrayList<>();
+            int sp() { return stack.size(); }
+            void push(Object x) { stack.add(x); }
+            void push2(Object x) { stack.add(EMPTY_SLOT); stack.add(x); }
+            void pushAt(int pos, Object x) { stack.add(stack.size()+pos, x); }
+            Object pop() { return stack.remove(sp()-1); }
+            Object top() { return stack.get(sp()-1); }
+            List<Object> args(boolean hasRecv, String type) {
+                return args(argsize(type) + (hasRecv ? 1 : 0));
+            }
+            List<Object> args(int argsize) {
+                return stack.subList(sp()-argsize, sp());
+            }
+            boolean stackMotion(int bc) {
+                switch (bc) {
+                case opc_pop:    pop();             break;
+                case opc_pop2:   pop(); pop();      break;
+                case opc_swap:   pushAt(-1, pop()); break;
+                case opc_dup:    push(top());       break;
+                case opc_dup_x1: pushAt(-2, top()); break;
+                case opc_dup_x2: pushAt(-3, top()); break;
+                // ? also: dup2{,_x1,_x2}
+                default:  return false;
+                }
+                return true;
+            }
+        }
+        private final String EMPTY_SLOT = "_";
+        private void removeEmptyJVMSlots(List<Object> args) {
+            for (;;) {
+                int i = args.indexOf(EMPTY_SLOT);
+                if (i >= 0 && i+1 < args.size()
+                    && (isConstant(args.get(i+1), CONSTANT_Long) ||
+                        isConstant(args.get(i+1), CONSTANT_Double)))
+                    args.remove(i);
+                else  break;
+            }
+        }
+
+        private Constant scanPattern(Method m, char patternMark) {
+            if (verbose)  System.err.println("scan "+m+" for pattern="+patternMark);
+            int wantTag;
+            switch (patternMark) {
+            case 'T': wantTag = CONSTANT_MethodType; break;
+            case 'H': wantTag = CONSTANT_MethodHandle; break;
+            case 'I': wantTag = CONSTANT_InvokeDynamic; break;
+            default: throw new InternalError();
+            }
+            Instruction i = m.instructions();
+            JVMState jvm = new JVMState();
+            Pool pool = cf.pool;
+            int branchCount = 0;
+            Object arg;
+            List<Object> args;
+            List<Object> bsmArgs = null;  // args to invokeGeneric
+        decode:
+            for (; i != null; i = i.next()) {
+                //System.out.println(jvm.stack+" "+i);
+                int bc = i.bc;
+                switch (bc) {
+                case opc_ldc:           jvm.push(pool.get(i.u1At(1)));   break;
+                case opc_ldc_w:         jvm.push(pool.get(i.u2At(1)));   break;
+                case opc_ldc2_w:        jvm.push2(pool.get(i.u2At(1)));  break;
+                case opc_aconst_null:   jvm.push(null);                  break;
+                case opc_bipush:        jvm.push((int)(byte) i.u1At(1)); break;
+                case opc_sipush:        jvm.push((int)(short)i.u2At(1)); break;
+
+                // these support creation of a restarg array
+                case opc_anewarray:
+                    arg = jvm.pop();
+                    if (!(arg instanceof Integer))  break decode;
+                    arg = Arrays.asList(new Object[(Integer)arg]);
+                    jvm.push(arg);
+                    break;
+                case opc_dup:
+                    jvm.push(jvm.top()); break;
+                case opc_aastore:
+                    args = jvm.args(3);  // array, index, value
+                    if (args.get(0) instanceof List &&
+                        args.get(1) instanceof Integer) {
+                        ((List<Object>)args.get(0)).set( (Integer)args.get(1), args.get(2) );
+                    }
+                    args.clear();
+                    break;
+
+                case opc_getstatic:
+                {
+                    // int.class compiles to getstatic Integer.TYPE
+                    int fieldi = i.u2At(1);
+                    char mark = poolMarks[fieldi];
+                    //System.err.println("getstatic "+fieldi+Arrays.asList(pool.getStrings(pool.getMemberRef((short)fieldi)))+mark);
+                    if (mark == 'J') {
+                        Short[] ref = pool.getMemberRef((short) fieldi);
+                        String name = pool.getString(CONSTANT_Utf8, ref[1]);
+                        if ("TYPE".equals(name)) {
+                            String wrapperName = pool.getString(CONSTANT_Class, ref[0]).replace('/', '.');
+                            // a primitive type descriptor
+                            Class<?> primClass;
+                            try {
+                                primClass = (Class<?>) Class.forName(wrapperName).getField(name).get(null);
+                            } catch (Exception ex) {
+                                throw new InternalError("cannot load "+wrapperName+"."+name);
+                            }
+                            jvm.push(primClass);
+                            break;
+                        }
+                    }
+                    // unknown field; keep going...
+                    jvm.push(UNKNOWN_CON);
+                    break;
+                }
+                case opc_putstatic:
+                {
+                    if (patternMark != 'I')  break decode;
+                    jvm.pop();
+                    // unknown field; keep going...
+                    break;
+                }
+
+                case opc_invokestatic:
+                case opc_invokevirtual:
+                {
+                    boolean hasRecv = (bc == opc_invokevirtual);
+                    int methi = i.u2At(1);
+                    char mark = poolMarks[methi];
+                    Short[] ref = pool.getMemberRef((short)methi);
+                    String type = pool.getString(CONSTANT_Utf8, ref[2]);
+                    //System.out.println("invoke "+pool.getString(CONSTANT_Utf8, ref[1])+" "+Arrays.asList(ref)+" : "+type);
+                    args = jvm.args(hasRecv, type);
+                    String intrinsic = null;
+                    Constant con;
+                    if (mark == 'D' || mark == 'J') {
+                        intrinsic = pool.getString(CONSTANT_Utf8, ref[1]);
+                        if (mark == 'J') {
+                            String cls = pool.getString(CONSTANT_Class, ref[0]);
+                            cls = cls.substring(1+cls.lastIndexOf('/'));
+                            intrinsic = cls+"."+intrinsic;
+                        }
+                        //System.out.println("recognized intrinsic "+intrinsic);
+                        byte refKind = -1;
+                        switch (intrinsic) {
+                        case "findGetter":          refKind = REF_getField;         break;
+                        case "findStaticGetter":    refKind = REF_getStatic;        break;
+                        case "findSetter":          refKind = REF_putField;         break;
+                        case "findStaticSetter":    refKind = REF_putStatic;        break;
+                        case "findVirtual":         refKind = REF_invokeVirtual;    break;
+                        case "findStatic":          refKind = REF_invokeStatic;     break;
+                        case "findSpecial":         refKind = REF_invokeSpecial;    break;
+                        case "findConstructor":     refKind = REF_newInvokeSpecial; break;
+                        }
+                        if (refKind >= 0 && (con = parseMemberLookup(refKind, args)) != null) {
+                            args.clear(); args.add(con);
+                            continue;
+                        }
+                    }
+                    Method ownMethod = null;
+                    if (mark == 'T' || mark == 'H' || mark == 'I') {
+                        ownMethod = findMember(cf.methods, ref[1], ref[2]);
+                    }
+                    switch (intrinsic == null ? "" : intrinsic) {
+                    case "fromMethodDescriptorString":
+                        con = makeMethodTypeCon(args.get(0));
+                        args.clear(); args.add(con);
+                        continue;
+                    case "methodType": {
+                        flattenVarargs(args);  // there are several overloadings, some with varargs
+                        StringBuilder buf = new StringBuilder();
+                        String rtype = null;
+                        for (Object typeArg : args) {
+                            if (typeArg instanceof Class) {
+                                Class<?> argClass = (Class<?>) typeArg;
+                                if (argClass.isPrimitive()) {
+                                    char tchar;
+                                    switch (argClass.getName()) {
+                                    case "void":    tchar = 'V'; break;
+                                    case "boolean": tchar = 'Z'; break;
+                                    case "byte":    tchar = 'B'; break;
+                                    case "char":    tchar = 'C'; break;
+                                    case "short":   tchar = 'S'; break;
+                                    case "int":     tchar = 'I'; break;
+                                    case "long":    tchar = 'J'; break;
+                                    case "float":   tchar = 'F'; break;
+                                    case "double":  tchar = 'D'; break;
+                                    default:  throw new InternalError(argClass.toString());
+                                    }
+                                    buf.append(tchar);
+                                } else {
+                                    // should not happen, but...
+                                    buf.append('L').append(argClass.getName().replace('.','/')).append(';');
+                                }
+                            } else if (typeArg instanceof Constant) {
+                                Constant argCon = (Constant) typeArg;
+                                if (argCon.tag == CONSTANT_Class) {
+                                    String cn = pool.get(argCon.itemIndex()).itemString();
+                                    if (cn.endsWith(";"))
+                                        buf.append(cn);
+                                    else
+                                        buf.append('L').append(cn).append(';');
+                                } else {
+                                    break decode;
+                                }
+                            } else {
+                                break decode;
+                            }
+                            if (rtype == null) {
+                                // first arg is treated differently
+                                rtype = buf.toString();
+                                buf.setLength(0);
+                                buf.append('(');
+                            }
+                        }
+                        buf.append(')').append(rtype);
+                        con = con = makeMethodTypeCon(buf.toString());
+                        args.clear(); args.add(con);
+                        continue;
+                    }
+                    case "lookup":
+                    case "dynamicInvoker":
+                        args.clear(); args.add(intrinsic);
+                        continue;
+                    case "lookupClass":
+                        if (args.equals(Arrays.asList("lookup"))) {
+                            // fold lookup().lookupClass() to the enclosing class
+                            args.clear(); args.add(pool.get(cf.thisc));
+                            continue;
+                        }
+                        break;
+                    case "invokeGeneric":
+                    case "invokeWithArguments":
+                        if (patternMark != 'I')  break decode;
+                        if ("invokeWithArguments".equals(intrinsic))
+                            flattenVarargs(args);
+                        bsmArgs = new ArrayList(args);
+                        args.clear(); args.add("invokeGeneric");
+                        continue;
+                    case "Integer.valueOf":
+                    case "Float.valueOf":
+                    case "Long.valueOf":
+                    case "Double.valueOf":
+                        removeEmptyJVMSlots(args);
+                        if (args.size() == 1) {
+                            arg = args.remove(0);
+                            assert(3456 == (CONSTANT_Integer*1000 + CONSTANT_Float*100 + CONSTANT_Long*10 + CONSTANT_Double));
+                            if (isConstant(arg, CONSTANT_Integer + "IFLD".indexOf(intrinsic.charAt(0)))
+                                || arg instanceof Number) {
+                                args.add(arg); continue;
+                            }
+                        }
+                        break decode;
+                    }
+                    if (!hasRecv && ownMethod != null && patternMark != 0) {
+                        con = constants.get(ownMethod);
+                        if (con == null)  break decode;
+                        args.clear(); args.add(con);
+                        continue;
+                    } else if (type.endsWith(")V")) {
+                        // allow calls like println("reached the pattern method")
+                        args.clear();
+                        continue;
+                    }
+                    break decode;  // bail out for most calls
+                }
+                case opc_areturn:
+                {
+                    ++branchCount;
+                    if (bsmArgs != null) {
+                        // parse bsmArgs as (MH, lookup, String, MT, [extra])
+                        Constant indyCon = makeInvokeDynamicCon(bsmArgs);
+                        if (indyCon != null) {
+                            Constant typeCon = (Constant) bsmArgs.get(3);
+                            indySignatures.put(m, pool.getString(typeCon.itemIndex()));
+                            return indyCon;
+                        }
+                        System.err.println(m+": inscrutable bsm arguments: "+bsmArgs);
+                        break decode;  // bail out
+                    }
+                    arg = jvm.pop();
+                    if (branchCount == 2 && UNKNOWN_CON.equals(arg))
+                        break;  // merge to next path
+                    if (isConstant(arg, wantTag))
+                        return (Constant) arg;
+                    break decode;  // bail out
+                }
+                default:
+                    if (jvm.stackMotion(i.bc))  break;
+                    if (bc >= opc_nconst_MIN && bc <= opc_nconst_MAX)
+                        { jvm.push(INSTRUCTION_CONSTANTS[bc - opc_nconst_MIN]); break; }
+                    if (patternMark == 'I') {
+                        // these support caching paths in INDY_x methods
+                        if (bc == opc_aload || bc >= opc_aload_0 && bc <= opc_aload_MAX)
+                            { jvm.push(UNKNOWN_CON); break; }
+                        if (bc == opc_astore || bc >= opc_astore_0 && bc <= opc_astore_MAX)
+                            { jvm.pop(); break; }
+                        switch (bc) {
+                        case opc_getfield:
+                        case opc_aaload:
+                            jvm.push(UNKNOWN_CON); break;
+                        case opc_ifnull:
+                        case opc_ifnonnull:
+                            // ignore branch target
+                            if (++branchCount != 1)  break decode;
+                            jvm.pop();
+                            break;
+                        case opc_checkcast:
+                            arg = jvm.top();
+                            if ("invokeWithArguments".equals(arg) ||
+                                "invokeGeneric".equals(arg))
+                                break;  // assume it is a helpful cast
+                            break decode;
+                        default:
+                            break decode;  // bail out
+                        }
+                        continue decode; // go to next instruction
+                    }
+                    break decode;  // bail out
+                } //end switch
+            }
+            System.err.println(m+": bailout on "+i+" jvm stack: "+jvm.stack);
+            return null;
+        }
+        private final String UNKNOWN_CON = "<unknown>";
+
+        private void flattenVarargs(List<Object> args) {
+            int size = args.size();
+            if (size > 0 && args.get(size-1) instanceof List)
+                args.addAll((List<Object>) args.remove(size-1));
+        }
+
+        private boolean isConstant(Object x, int tag) {
+            return x instanceof Constant && ((Constant)x).tag == tag;
+        }
+        private Constant makeMethodTypeCon(Object x) {
+            short utfIndex;
+            if (x instanceof String)
+                utfIndex = (short) cf.pool.addConstant(CONSTANT_Utf8, x).index;
+            else if (isConstant(x, CONSTANT_String))
+                utfIndex = ((Constant)x).itemIndex();
+            else  return null;
+            return cf.pool.addConstant(CONSTANT_MethodType, utfIndex);
+        }
+        private Constant parseMemberLookup(byte refKind, List<Object> args) {
+            // E.g.: lookup().findStatic(Foo.class, "name", MethodType)
+            if (args.size() != 4)  return null;
+            int argi = 0;
+            if (!"lookup".equals(args.get(argi++)))  return null;
+            short refindex, cindex, ntindex, nindex, tindex;
+            Object con;
+            if (!isConstant(con = args.get(argi++), CONSTANT_Class))  return null;
+            cindex = (short)((Constant)con).index;
+            if (!isConstant(con = args.get(argi++), CONSTANT_String))  return null;
+            nindex = ((Constant)con).itemIndex();
+            if (isConstant(con = args.get(argi++), CONSTANT_MethodType) ||
+                isConstant(con, CONSTANT_Class)) {
+                tindex = ((Constant)con).itemIndex();
+            } else return null;
+            ntindex = (short) cf.pool.addConstant(CONSTANT_NameAndType,
+                    new Short[]{ nindex, tindex }).index;
+            byte reftag = CONSTANT_Method;
+            if (refKind <= REF_putStatic)
+                reftag = CONSTANT_Field;
+            else if (refKind == REF_invokeInterface)
+                reftag = CONSTANT_InterfaceMethod;
+            Constant ref = cf.pool.addConstant(reftag, new Short[]{ cindex, ntindex });
+            return cf.pool.addConstant(CONSTANT_MethodHandle, new Object[]{ refKind, (short)ref.index });
+        }
+        private Constant makeInvokeDynamicCon(List<Object> args) {
+            // E.g.: MH_bsm.invokeGeneric(lookup(), "name", MethodType, "extraArg")
+            removeEmptyJVMSlots(args);
+            if (args.size() != 4 && args.size() != 5)  return null;
+            int argi = 0;
+            short nindex, tindex, ntindex, bsmindex;
+            Object con;
+            if (!isConstant(con = args.get(argi++), CONSTANT_MethodHandle))  return null;
+            bsmindex = (short) ((Constant)con).index;
+            if (!"lookup".equals(args.get(argi++)))  return null;
+            if (!isConstant(con = args.get(argi++), CONSTANT_String))  return null;
+            nindex = ((Constant)con).itemIndex();
+            if (!isConstant(con = args.get(argi++), CONSTANT_MethodType))  return null;
+            tindex = ((Constant)con).itemIndex();
+            ntindex = (short) cf.pool.addConstant(CONSTANT_NameAndType,
+                                                  new Short[]{ nindex, tindex }).index;
+            if (transitionalJSR292) {
+                if (argi != args.size()) {
+                    System.err.println("BSM specifier has extra arguments but transitionalJSR292=1");
+                    return null;
+                }
+                return cf.pool.addConstant(CONSTANT_InvokeDynamic_17,
+                        new Short[]{ bsmindex, ntindex });
+            }
+            List<Object> extraArgs = Collections.emptyList();
+            if (argi < args.size()) {
+                Object arg = args.get(argi);
+                if (arg instanceof List)
+                    extraArgs = (List<Object>) arg;
+                else
+                    extraArgs = Arrays.asList(arg);
+                removeEmptyJVMSlots(args);
+            }
+            List<Short> extraArgIndexes = new CountedList<>(Short.class);
+            for (Object x : extraArgs) {
+                if (x instanceof Number) {
+                    Object num = null; byte numTag = 0;
+                    if (x instanceof Integer) { num = x; numTag = CONSTANT_Integer; }
+                    if (x instanceof Float)   { num = Float.floatToRawIntBits((Float)x); numTag = CONSTANT_Float; }
+                    if (x instanceof Long)    { num = x; numTag = CONSTANT_Long; }
+                    if (x instanceof Double)  { num = Double.doubleToRawLongBits((Double)x); numTag = CONSTANT_Double; }
+                    if (num != null)  x = cf.pool.addConstant(numTag, x);
+                }
+                if (!(x instanceof Constant))  return null;
+                extraArgIndexes.add((short) ((Constant)x).index);
+            }
+            List<Object[]> specs = bootstrapMethodSpecifiers(true);
+            int specindex = -1;
+            Object[] spec = new Object[]{ bsmindex, extraArgIndexes };
+            for (Object[] spec1 : specs) {
+                if (Arrays.equals(spec1, spec)) {
+                    specindex = specs.indexOf(spec1);
+                    if (verbose)  System.err.println("reusing BSM specifier: "+spec1[0]+spec1[1]);
+                    break;
+                }
+            }
+            if (specindex == -1) {
+                specindex = (short) specs.size();
+                specs.add(spec);
+                if (verbose)  System.err.println("adding BSM specifier: "+spec[0]+spec[1]);
+            }
+            return cf.pool.addConstant(CONSTANT_InvokeDynamic,
+                        new Short[]{ (short)specindex, ntindex });
+        }
+
+        List<Object[]> bootstrapMethodSpecifiers(boolean createIfNotFound) {
+            Attr bsms = cf.findAttr("BootstrapMethods");
+            if (bsms == null) {
+                if (!createIfNotFound)  return null;
+                bsms = new Attr(cf, "BootstrapMethods", new byte[]{0,0});
+                assert(bsms == cf.findAttr("BootstrapMethods"));
+            }
+            if (bsms.item instanceof byte[]) {
+                // unflatten
+                List<Object[]> specs = new CountedList<>(Object[].class);
+                DataInputStream in = new DataInputStream(new ByteArrayInputStream((byte[]) bsms.item));
+                try {
+                    int len = (char) in.readShort();
+                    for (int i = 0; i < len; i++) {
+                        short bsm = in.readShort();
+                        int argc = (char) in.readShort();
+                        List<Short> argv = new CountedList<>(Short.class);
+                        for (int j = 0; j < argc; j++)
+                            argv.add(in.readShort());
+                        specs.add(new Object[]{ bsm, argv });
+                    }
+                } catch (IOException ex) { throw new InternalError(); }
+                bsms.item = specs;
+            }
+            return (List<Object[]>) bsms.item;
+        }
+    }
+
+    private DataInputStream openInput(File f) throws IOException {
+        return new DataInputStream(new BufferedInputStream(new FileInputStream(f)));
+    }
+
+    private DataOutputStream openOutput(File f) throws IOException {
+        if (!overwrite && f.exists())
+            throw new IOException("file already exists: "+f);
+        ensureDirectory(f.getParentFile());
+        return new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f)));
+    }
+
+    static byte[] readRawBytes(DataInputStream in, int size) throws IOException {
+        byte[] bytes = new byte[size];
+        int nr = in.read(bytes);
+        if (nr != size)
+            throw new InternalError("wrong size: "+nr);
+        return bytes;
+    }
+
+    private interface Chunk {
+        void readFrom(DataInputStream in) throws IOException;
+        void writeTo(DataOutputStream out) throws IOException;
+    }
+
+    private static class CountedList<T> extends ArrayList<T> implements Chunk {
+        final Class<? extends T> itemClass;
+        final int rowlen;
+        CountedList(Class<? extends T> itemClass, int rowlen) {
+            this.itemClass = itemClass;
+            this.rowlen = rowlen;
+        }
+        CountedList(Class<? extends T> itemClass) { this(itemClass, -1); }
+        public void readFrom(DataInputStream in) throws IOException {
+            int count = in.readUnsignedShort();
+            while (size() < count) {
+                if (rowlen < 0) {
+                    add(readInput(in, itemClass));
+                } else {
+                    Class<?> elemClass = itemClass.getComponentType();
+                    Object[] row = (Object[]) java.lang.reflect.Array.newInstance(elemClass, rowlen);
+                    for (int i = 0; i < rowlen; i++)
+                        row[i] = readInput(in, elemClass);
+                    add(itemClass.cast(row));
+                }
+            }
+        }
+        public void writeTo(DataOutputStream out) throws IOException {
+            out.writeShort((short)size());
+            for (T item : this) {
+                writeOutput(out, item);
+            }
+        }
+    }
+
+    private static <T> T readInput(DataInputStream in, Class<T> dataClass) throws IOException {
+        Object data;
+        if (dataClass == Integer.class) {
+            data = in.readInt();
+        } else if (dataClass == Short.class) {
+            data = in.readShort();
+        } else if (dataClass == Byte.class) {
+            data = in.readByte();
+        } else if (dataClass == String.class) {
+            data = in.readUTF();
+        } else if (Chunk.class.isAssignableFrom(dataClass)) {
+            T obj;
+            try { obj = dataClass.newInstance(); }
+                catch (Exception ex) { throw new RuntimeException(ex); }
+            ((Chunk)obj).readFrom(in);
+            data = obj;
+        } else {
+            throw new InternalError("bad input datum: "+dataClass);
+        }
+        return dataClass.cast(data);
+    }
+    private static <T> T readInput(byte[] bytes, Class<T> dataClass) {
+        try {
+            return readInput(new DataInputStream(new ByteArrayInputStream(bytes)), dataClass);
+        } catch (IOException ex) {
+            throw new InternalError();
+        }
+    }
+    private static void readInputs(DataInputStream in, Object... data) throws IOException {
+        for (Object x : data)  ((Chunk)x).readFrom(in);
+    }
+
+    private static void writeOutput(DataOutputStream out, Object data) throws IOException {
+        if (data == null) {
+            return;
+        } if (data instanceof Integer) {
+            out.writeInt((Integer)data);
+        } else if (data instanceof Long) {
+            out.writeLong((Long)data);
+        } else if (data instanceof Short) {
+            out.writeShort((Short)data);
+        } else if (data instanceof Byte) {
+            out.writeByte((Byte)data);
+        } else if (data instanceof String) {
+            out.writeUTF((String)data);
+        } else if (data instanceof byte[]) {
+            out.write((byte[])data);
+        } else if (data instanceof Object[]) {
+            for (Object x : (Object[]) data)
+                writeOutput(out, x);
+        } else if (data instanceof Chunk) {
+            Chunk x = (Chunk) data;
+            x.writeTo(out);
+        } else if (data instanceof List) {
+            for (Object x : (List<?>) data)
+                writeOutput(out, x);
+        } else {
+            throw new InternalError("bad output datum: "+data+" : "+data.getClass().getName());
+        }
+    }
+    private static void writeOutputs(DataOutputStream out, Object... data) throws IOException {
+        for (Object x : data)  writeOutput(out, x);
+    }
+
+    public static abstract class Outer {
+        public abstract List<? extends Inner> inners();
+        protected void linkInners() {
+            for (Inner i : inners()) {
+                i.linkOuter(this);
+                if (i instanceof Outer)
+                    ((Outer)i).linkInners();
+            }
+        }
+        public <T extends Outer> T outer(Class<T> c) {
+            for (Outer walk = this;; walk = ((Inner)walk).outer()) {
+                if (c.isInstance(walk))
+                    return c.cast(walk);
+                //if (!(walk instanceof Inner))  return null;
+            }
+        }
+
+        public abstract List<Attr> attrs();
+        public Attr findAttr(String name) {
+            return findAttr(outer(ClassFile.class).pool.stringIndex(name, false));
+        }
+        public Attr findAttr(int name) {
+            if (name == 0)  return null;
+            for (Attr a : attrs()) {
+                if (a.name == name)  return a;
+            }
+            return null;
+        }
+    }
+    public interface Inner { Outer outer(); void linkOuter(Outer o); }
+    public static abstract class InnerOuter extends Outer implements Inner {
+        public Outer outer;
+        public Outer outer() { return outer; }
+        public void linkOuter(Outer o) { assert(outer == null); outer = o; }
+    }
+    public static class Constant<T> implements Chunk {
+        public final byte tag;
+        public final T item;
+        public final int index;
+        public Constant(int index, byte tag, T item) {
+            this.index = index;
+            this.tag = tag;
+            this.item = item;
+        }
+        public Constant checkTag(byte tag) {
+            if (this.tag != tag)  throw new InternalError(this.toString());
+            return this;
+        }
+        public String itemString() { return (String)item; }
+        public Short itemIndex() { return (Short)item; }
+        public Short[] itemIndexes() { return (Short[])item; }
+        public void readFrom(DataInputStream in) throws IOException {
+            throw new InternalError("do not call");
+        }
+        public void writeTo(DataOutputStream out) throws IOException {
+            writeOutputs(out, tag, item);
+        }
+        public boolean equals(Object x) { return (x instanceof Constant && equals((Constant)x)); }
+        public boolean equals(Constant that) {
+            return (this.tag == that.tag && this.itemAsComparable().equals(that.itemAsComparable()));
+        }
+        public int hashCode() { return (tag * 31) + this.itemAsComparable().hashCode(); }
+        public Object itemAsComparable() {
+            switch (tag) {
+            case CONSTANT_Double:   return Double.longBitsToDouble((Long)item);
+            case CONSTANT_Float:    return Float.intBitsToFloat((Integer)item);
+            }
+            return (item instanceof Object[] ? Arrays.asList((Object[])item) : item);
+        }
+        public String toString() {
+            String itstr = String.valueOf(itemAsComparable());
+            return (index + ":" + tagName(tag) + (itstr.startsWith("[")?"":"=") + itstr);
+        }
+        private static String[] TAG_NAMES;
+        public static String tagName(byte tag) {  // used for error messages
+            if (TAG_NAMES == null)
+                TAG_NAMES = ("None Utf8 Unicode Integer Float Long Double Class String"
+                             +" Fieldref Methodref InterfaceMethodref NameAndType #13 #14"
+                             +" MethodHandle MethodType InvokeDynamic#17 InvokeDynamic").split(" ");
+            if ((tag & 0xFF) >= TAG_NAMES.length)  return "#"+(tag & 0xFF);
+            return TAG_NAMES[tag & 0xFF];
+        }
+    }
+
+    public static class Pool extends CountedList<Constant> implements Chunk {
+        private Map<String,Short> strings = new TreeMap<>();
+
+        public Pool() {
+            super(Constant.class);
+        }
+        public void readFrom(DataInputStream in) throws IOException {
+            int count = in.readUnsignedShort();
+            add(null);  // always ignore first item
+            while (size() < count) {
+                readConstant(in);
+            }
+        }
+        public <T> Constant<T> addConstant(byte tag, T item) {
+            Constant<T> con = new Constant<>(size(), tag, item);
+            int idx = indexOf(con);
+            if (idx >= 0)  return get(idx);
+            add(con);
+            if (tag == CONSTANT_Utf8)  strings.put((String)item, (short) con.index);
+            return con;
+        }
+        private void readConstant(DataInputStream in) throws IOException {
+            byte tag = in.readByte();
+            int index = size();
+            Object arg;
+            switch (tag) {
+            case CONSTANT_Utf8:
+                arg = in.readUTF();
+                strings.put((String) arg, (short) size());
+                break;
+            case CONSTANT_Integer:
+            case CONSTANT_Float:
+                arg = in.readInt(); break;
+            case CONSTANT_Long:
+            case CONSTANT_Double:
+                add(new Constant(index, tag, in.readLong()));
+                add(null);
+                return;
+            case CONSTANT_Class:
+            case CONSTANT_String:
+                arg = in.readShort(); break;
+            case CONSTANT_Field:
+            case CONSTANT_Method:
+            case CONSTANT_InterfaceMethod:
+            case CONSTANT_NameAndType:
+            case CONSTANT_InvokeDynamic_17:
+            case CONSTANT_InvokeDynamic:
+                // read an ordered pair
+                arg = new Short[] { in.readShort(), in.readShort() };
+                break;
+            case CONSTANT_MethodHandle:
+                // read an ordered pair; first part is a u1 (not u2)
+                arg = new Object[] { in.readByte(), in.readShort() };
+                break;
+            case CONSTANT_MethodType:
+                arg = in.readShort(); break;
+            default:
+                throw new InternalError("bad CP tag "+tag);
+            }
+            add(new Constant(index, tag, arg));
+        }
+
+        // Access:
+        public Constant get(int index) {
+            // extra 1-bits get into the shorts
+            return super.get((char) index);
+        }
+        String getString(byte tag, short index) {
+            get(index).checkTag(tag);
+            return getString(index);
+        }
+        String getString(short index) {
+            Object v = get(index).item;
+            if (v instanceof Short)
+                v = get((Short)v).checkTag(CONSTANT_Utf8).item;
+            return (String) v;
+        }
+        String[] getStrings(Short[] indexes) {
+            String[] res = new String[indexes.length];
+            for (int i = 0; i < indexes.length; i++)
+                res[i] = getString(indexes[i]);
+            return res;
+        }
+        int stringIndex(String name, boolean createIfNotFound) {
+            Short x = strings.get(name);
+            if (x != null)  return (char)(int) x;
+            if (!createIfNotFound)  return 0;
+            return addConstant(CONSTANT_Utf8, name).index;
+        }
+        Short[] getMemberRef(short index) {
+            Short[] cls_nnt = get(index).itemIndexes();
+            Short[] name_type = get(cls_nnt[1]).itemIndexes();
+            return new Short[]{ cls_nnt[0], name_type[0], name_type[1] };
+        }
+    }
+
+    public class ClassFile extends Outer implements Chunk {
+        ClassFile(File f) throws IOException {
+            DataInputStream in = openInput(f);
+            try {
+                readFrom(in);
+            } finally {
+                if (in != null)  in.close();
+            }
+        }
+
+        public int                magic, version;  // <min:maj>
+        public final Pool         pool       = new Pool();
+        public short              access, thisc, superc;
+        public final List<Short>  interfaces = new CountedList<>(Short.class);
+        public final List<Field>  fields     = new CountedList<>(Field.class);
+        public final List<Method> methods    = new CountedList<>(Method.class);
+        public final List<Attr>   attrs      = new CountedList<>(Attr.class);
+
+        public final void readFrom(DataInputStream in) throws IOException {
+            magic = in.readInt(); version = in.readInt();
+            if (magic != 0xCAFEBABE)  throw new IOException("bad magic number");
+            pool.readFrom(in);
+            Code_index = pool.stringIndex("Code", false);
+            access = in.readShort(); thisc = in.readShort(); superc = in.readShort();
+            readInputs(in, interfaces, fields, methods, attrs);
+            if (in.read() >= 0)  throw new IOException("junk after end of file");
+            linkInners();
+        }
+
+        void writeTo(File f) throws IOException {
+            DataOutputStream out = openOutput(f);
+            try {
+                writeTo(out);
+            } finally {
+                out.close();
+            }
+        }
+
+        public void writeTo(DataOutputStream out) throws IOException {
+            writeOutputs(out, magic, version, pool,
+                         access, thisc, superc, interfaces,
+                         fields, methods, attrs);
+        }
+
+        public byte[] toByteArray() {
+            try {
+                ByteArrayOutputStream buf = new ByteArrayOutputStream();
+                writeTo(new DataOutputStream(buf));
+                return buf.toByteArray();
+            } catch (IOException ex) {
+                throw new InternalError();
+            }
+        }
+
+        public List<Inner> inners() {
+            List<Inner> inns = new ArrayList<>();
+            inns.addAll(fields); inns.addAll(methods); inns.addAll(attrs);
+            return inns;
+        }
+        public List<Attr> attrs() { return attrs; }
+
+        // derived stuff:
+        public String nameString() { return pool.getString(CONSTANT_Class, thisc); }
+        int Code_index;
+    }
+
+    private static <T extends Member> T findMember(List<T> mems, int name, int type) {
+        if (name == 0 || type == 0)  return null;
+        for (T m : mems) {
+            if (m.name == name && m.type == type)  return m;
+        }
+        return null;
+    }
+
+    public static class Member extends InnerOuter implements Chunk {
+        public short access, name, type;
+        public final List<Attr> attrs = new CountedList<>(Attr.class);
+        public void readFrom(DataInputStream in) throws IOException {
+            access = in.readShort(); name = in.readShort(); type = in.readShort();
+            readInputs(in, attrs);
+        }
+        public void writeTo(DataOutputStream out) throws IOException {
+            writeOutputs(out, access, name, type, attrs);
+        }
+        public List<Attr> inners() { return attrs; }
+        public List<Attr> attrs() { return attrs; }
+        public ClassFile outer() { return (ClassFile) outer; }
+        public String nameString() { return outer().pool.getString(CONSTANT_Utf8, name); }
+        public String typeString() { return outer().pool.getString(CONSTANT_Utf8, type); }
+        public String toString() {
+            if (outer == null)  return super.toString();
+            return nameString() + (this instanceof Method ? "" : ":")
+                    + simplifyType(typeString());
+        }
+    }
+    public static class Field extends Member {
+    }
+    public static class Method extends Member {
+        public Code code() {
+            Attr a = findAttr("Code");
+            if (a == null)  return null;
+            return (Code) a.item;
+        }
+        public Instruction instructions() {
+            Code code = code();
+            if (code == null)  return null;
+            return code.instructions();
+        }
+    }
+
+    public static class Attr extends InnerOuter implements Chunk {
+        public short name;
+        public int size = -1;  // no pre-declared size
+        public Object item;
+
+        public Attr() {}
+        public Attr(Outer outer, String name, Object item) {
+            ClassFile cf = outer.outer(ClassFile.class);
+            linkOuter(outer);
+            this.name = (short) cf.pool.stringIndex(name, true);
+            this.item = item;
+            outer.attrs().add(this);
+        }
+        public void readFrom(DataInputStream in) throws IOException {
+            name = in.readShort();
+            size = in.readInt();
+            item = readRawBytes(in, size);
+        }
+        public void writeTo(DataOutputStream out) throws IOException {
+            out.writeShort(name);
+            // write the 4-byte size header and then the contents:
+            byte[] bytes;
+            int trueSize;
+            if (item instanceof byte[]) {
+                bytes = (byte[]) item;
+                out.writeInt(trueSize = bytes.length);
+                out.write(bytes);
+            } else {
+                trueSize = flatten(out);
+            }
+            if (trueSize != size && size >= 0)
+                System.err.println("warning: attribute size changed "+size+" to "+trueSize);
+        }
+        public void linkOuter(Outer o) {
+            super.linkOuter(o);
+            if (item instanceof byte[] &&
+                outer instanceof Method &&
+                ((Method)outer).outer().Code_index == name) {
+                    item = readInput((byte[])item, Code.class);
+            }
+        }
+        public List<Inner> inners() {
+            if (item instanceof Inner)
+                return Collections.nCopies(1, (Inner)item);
+            return Collections.emptyList();
+        }
+        public List<Attr> attrs() { return null; }  // Code overrides this
+        public byte[] flatten() {
+            ByteArrayOutputStream buf = new ByteArrayOutputStream(size);
+            flatten(buf);
+            return buf.toByteArray();
+        }
+        public int flatten(DataOutputStream out) throws IOException {
+            ByteArrayOutputStream buf = new ByteArrayOutputStream(Math.max(20, size));
+            int trueSize = flatten(buf);
+            out.writeInt(trueSize);
+            buf.writeTo(out);
+            return trueSize;
+        }
+        private int flatten(ByteArrayOutputStream buf) {
+            try {
+                writeOutput(new DataOutputStream(buf), item);
+                return buf.size();
+            } catch (IOException ex) {
+                throw new InternalError();
+            }
+        }
+        public String nameString() {
+            ClassFile cf = outer(ClassFile.class);
+            if (cf == null)  return "#"+name;
+            return cf.pool.getString(name);
+        }
+        public String toString() {
+            return nameString()+(size < 0 ? "=" : "["+size+"]=")+item;
+        }
+    }
+
+    public static class Code extends InnerOuter implements Chunk {
+        public short stacks, locals;
+        public byte[] bytes;
+        public final List<Short[]> etable = new CountedList<>(Short[].class, 4);
+        public final List<Attr> attrs = new CountedList<>(Attr.class);
+        // etable[N] = (N)*{ startpc, endpc, handlerpc, catchtype }
+        public void readFrom(DataInputStream in) throws IOException {
+            stacks = in.readShort(); locals = in.readShort();
+            bytes = readRawBytes(in, in.readInt());
+            readInputs(in, etable, attrs);
+        }
+        public void writeTo(DataOutputStream out) throws IOException {
+            writeOutputs(out, stacks, locals, bytes.length, bytes, etable, attrs);
+        }
+        public List<Attr> inners() { return attrs; }
+        public List<Attr> attrs() { return attrs; }
+        public Instruction instructions() {
+            return new Instruction(bytes, 0);
+        }
+    }
+
+    // lots of constants
+    private static final byte
+        CONSTANT_Utf8              = 1,
+        CONSTANT_Integer           = 3,
+        CONSTANT_Float             = 4,
+        CONSTANT_Long              = 5,
+        CONSTANT_Double            = 6,
+        CONSTANT_Class             = 7,
+        CONSTANT_String            = 8,
+        CONSTANT_Field             = 9,
+        CONSTANT_Method            = 10,
+        CONSTANT_InterfaceMethod   = 11,
+        CONSTANT_NameAndType       = 12,
+        CONSTANT_MethodHandle      = 15,  // JSR 292
+        CONSTANT_MethodType        = 16,  // JSR 292
+        CONSTANT_InvokeDynamic_17  = 17,  // JSR 292, only occurs in old class files
+        CONSTANT_InvokeDynamic     = 18;  // JSR 292
+    private static final byte
+        REF_getField               = 1,
+        REF_getStatic              = 2,
+        REF_putField               = 3,
+        REF_putStatic              = 4,
+        REF_invokeVirtual          = 5,
+        REF_invokeStatic           = 6,
+        REF_invokeSpecial          = 7,
+        REF_newInvokeSpecial       = 8,
+        REF_invokeInterface        = 9;
+
+    private static final int
+        opc_nop                    = 0,
+        opc_aconst_null            = 1,
+        opc_nconst_MIN             = 2,  // iconst_m1
+        opc_nconst_MAX             = 15, // dconst_1
+        opc_bipush                 = 16,
+        opc_sipush                 = 17,
+        opc_ldc                    = 18,
+        opc_ldc_w                  = 19,
+        opc_ldc2_w                 = 20,
+        opc_aload                  = 25,
+        opc_aload_0                = 42,
+        opc_aload_MAX              = 45,
+        opc_aaload                 = 50,
+        opc_astore                 = 58,
+        opc_astore_0               = 75,
+        opc_astore_MAX             = 78,
+        opc_aastore                = 83,
+        opc_pop                    = 87,
+        opc_pop2                   = 88,
+        opc_dup                    = 89,
+        opc_dup_x1                 = 90,
+        opc_dup_x2                 = 91,
+        opc_dup2                   = 92,
+        opc_dup2_x1                = 93,
+        opc_dup2_x2                = 94,
+        opc_swap                   = 95,
+        opc_tableswitch            = 170,
+        opc_lookupswitch           = 171,
+        opc_areturn                = 176,
+        opc_getstatic              = 178,
+        opc_putstatic              = 179,
+        opc_getfield               = 180,
+        opc_putfield               = 181,
+        opc_invokevirtual          = 182,
+        opc_invokespecial          = 183,
+        opc_invokestatic           = 184,
+        opc_invokeinterface        = 185,
+        opc_invokedynamic          = 186,
+        opc_anewarray              = 189,
+        opc_checkcast              = 192,
+        opc_ifnull                 = 198,
+        opc_ifnonnull              = 199,
+        opc_wide                   = 196;
+
+    private static final Object[] INSTRUCTION_CONSTANTS = {
+        -1, 0, 1, 2, 3, 4, 5, 0L, 1L, 0.0F, 1.0F, 2.0F, 0.0D, 1.0D
+    };
+
+    private static final String INSTRUCTION_FORMATS =
+        "nop$ aconst_null$L iconst_m1$I iconst_0$I iconst_1$I "+
+        "iconst_2$I iconst_3$I iconst_4$I iconst_5$I lconst_0$J_ "+
+        "lconst_1$J_ fconst_0$F fconst_1$F fconst_2$F dconst_0$D_ "+
+        "dconst_1$D_ bipush=bx$I sipush=bxx$I ldc=bk$X ldc_w=bkk$X "+
+        "ldc2_w=bkk$X_ iload=bl/wbll$I lload=bl/wbll$J_ fload=bl/wbll$F "+
+        "dload=bl/wbll$D_ aload=bl/wbll$L iload_0$I iload_1$I "+
+        "iload_2$I iload_3$I lload_0$J_ lload_1$J_ lload_2$J_ "+
+        "lload_3$J_ fload_0$F fload_1$F fload_2$F fload_3$F dload_0$D_ "+
+        "dload_1$D_ dload_2$D_ dload_3$D_ aload_0$L aload_1$L "+
+        "aload_2$L aload_3$L iaload$LI$I laload$LI$J_ faload$LI$F "+
+        "daload$LI$D_ aaload$LI$L baload$LI$I caload$LI$I saload$LI$I "+
+        "istore=bl/wbll$I$ lstore=bl/wbll$J_$ fstore=bl/wbll$F$ "+
+        "dstore=bl/wbll$D_$ astore=bl/wbll$L$ istore_0$I$ istore_1$I$ "+
+        "istore_2$I$ istore_3$I$ lstore_0$J_$ lstore_1$J_$ "+
+        "lstore_2$J_$ lstore_3$J_$ fstore_0$F$ fstore_1$F$ fstore_2$F$ "+
+        "fstore_3$F$ dstore_0$D_$ dstore_1$D_$ dstore_2$D_$ "+
+        "dstore_3$D_$ astore_0$L$ astore_1$L$ astore_2$L$ astore_3$L$ "+
+        "iastore$LII$ lastore$LIJ_$ fastore$LIF$ dastore$LID_$ "+
+        "aastore$LIL$ bastore$LII$ castore$LII$ sastore$LII$ pop$X$ "+
+        "pop2$XX$ dup$X$XX dup_x1$XX$XXX dup_x2$XXX$XXXX dup2$XX$XXXX "+
+        "dup2_x1$XXX$XXXXX dup2_x2$XXXX$XXXXXX swap$XX$XX "+
+        "iadd$II$I ladd$J_J_$J_ fadd$FF$F dadd$D_D_$D_ isub$II$I "+
+        "lsub$J_J_$J_ fsub$FF$F dsub$D_D_$D_ imul$II$I lmul$J_J_$J_ "+
+        "fmul$FF$F dmul$D_D_$D_ idiv$II$I ldiv$J_J_$J_ fdiv$FF$F "+
+        "ddiv$D_D_$D_ irem$II$I lrem$J_J_$J_ frem$FF$F drem$D_D_$D_ "+
+        "ineg$I$I lneg$J_$J_ fneg$F$F dneg$D_$D_ ishl$II$I lshl$J_I$J_ "+
+        "ishr$II$I lshr$J_I$J_ iushr$II$I lushr$J_I$J_ iand$II$I "+
+        "land$J_J_$J_ ior$II$I lor$J_J_$J_ ixor$II$I lxor$J_J_$J_ "+
+        "iinc=blx/wbllxx$ i2l$I$J_ i2f$I$F i2d$I$D_ l2i$J_$I l2f$J_$F "+
+        "l2d$J_$D_ f2i$F$I f2l$F$J_ f2d$F$D_ d2i$D_$I d2l$D_$J_ "+
+        "d2f$D_$F i2b$I$I i2c$I$I i2s$I$I lcmp fcmpl fcmpg dcmpl dcmpg "+
+        "ifeq=boo ifne=boo iflt=boo ifge=boo ifgt=boo ifle=boo "+
+        "if_icmpeq=boo if_icmpne=boo if_icmplt=boo if_icmpge=boo "+
+        "if_icmpgt=boo if_icmple=boo if_acmpeq=boo if_acmpne=boo "+
+        "goto=boo jsr=boo ret=bl/wbll tableswitch=* lookupswitch=* "+
+        "ireturn lreturn freturn dreturn areturn return "+
+        "getstatic=bkf$Q putstatic=bkf$Q$ getfield=bkf$L$Q "+
+        "putfield=bkf$LQ$ invokevirtual=bkm$LQ$Q "+
+        "invokespecial=bkm$LQ$Q invokestatic=bkm$Q$Q "+
+        "invokeinterface=bkixx$LQ$Q invokedynamic=bkd__$Q$Q new=bkc$L "+
+        "newarray=bx$I$L anewarray=bkc$I$L arraylength$L$I athrow "+
+        "checkcast=bkc$L$L instanceof=bkc$L$I monitorenter$L "+
+        "monitorexit$L wide=* multianewarray=bkcx ifnull=boo "+
+        "ifnonnull=boo goto_w=boooo jsr_w=boooo ";
+    private static final String[] INSTRUCTION_NAMES;
+    private static final String[] INSTRUCTION_POPS;
+    private static final int[] INSTRUCTION_INFO;
+    static {
+        String[] insns = INSTRUCTION_FORMATS.split(" ");
+        assert(insns[opc_lookupswitch].startsWith("lookupswitch"));
+        assert(insns[opc_tableswitch].startsWith("tableswitch"));
+        assert(insns[opc_wide].startsWith("wide"));
+        assert(insns[opc_invokedynamic].startsWith("invokedynamic"));
+        int[] info = new int[256];
+        String[] names = new String[256];
+        String[] pops = new String[256];
+        for (int i = 0; i < insns.length; i++) {
+            String insn = insns[i];
+            int dl = insn.indexOf('$');
+            if (dl > 0) {
+                String p = insn.substring(dl+1);
+                if (p.indexOf('$') < 0)  p = "$" + p;
+                pops[i] = p;
+                insn = insn.substring(0, dl);
+            }
+            int eq = insn.indexOf('=');
+            if (eq < 0) {
+                info[i] = 1;
+                names[i] = insn;
+                continue;
+            }
+            names[i] = insn.substring(0, eq);
+            String fmt = insn.substring(eq+1);
+            if (fmt.equals("*")) {
+                info[i] = 0;
+                continue;
+            }
+            int sl = fmt.indexOf('/');
+            if (sl < 0) {
+                info[i] = (char) fmt.length();
+            } else {
+                String wfmt = fmt.substring(sl+1);
+                fmt = fmt.substring(0, sl);
+                info[i] = (char)( fmt.length() + (wfmt.length() * 16) );
+            }
+        }
+        INSTRUCTION_INFO = info;
+        INSTRUCTION_NAMES = names;
+        INSTRUCTION_POPS = pops;
+    }
+
+    public static class Instruction implements Cloneable {
+        byte[] codeBase;
+        int pc;
+        int bc;
+        int info;
+        int wide;
+        int len;
+        Instruction(byte[] codeBase, int pc) {
+            this.codeBase = codeBase;
+            init(pc);
+        }
+        public Instruction clone() {
+            try {
+                return (Instruction) super.clone();
+            } catch (CloneNotSupportedException ex) {
+                throw new InternalError();
+            }
+        }
+        private Instruction init(int pc) {
+            this.pc = pc;
+            this.bc = codeBase[pc] & 0xFF;
+            this.info = INSTRUCTION_INFO[bc];
+            this.wide = 0;
+            this.len = (info & 0x0F);
+            if (len == 0)
+                computeLength();
+            return this;
+        }
+        Instruction next() {
+            if (len == 0 && bc != 0)  throw new InternalError();
+            int npc = pc + len;
+            if (npc == codeBase.length)
+                return null;
+            return init(npc);
+        }
+        void forceNext(int newLen) {
+            bc = opc_nop;
+            len = newLen;
+        }
+
+        public String toString() {
+            StringBuilder buf = new StringBuilder();
+            buf.append(pc).append(":").append(INSTRUCTION_NAMES[bc]);
+            switch (len) {
+            case 3: buf.append(" ").append(u2At(1)); break;
+            case 5: buf.append(" ").append(u2At(1)).append(" ").append(u2At(3)); break;
+            default:  for (int i = 1; i < len; i++)  buf.append(" ").append(u1At(1));
+            }
+            return buf.toString();
+        }
+
+        // these are the hard parts
+        private void computeLength() {
+            int cases;
+            switch (bc) {
+            case opc_wide:
+                bc = codeBase[pc + 1];
+                info = INSTRUCTION_INFO[bc];
+                len = ((info >> 4) & 0x0F);
+                if (len == 0)  throw new RuntimeException("misplaced wide bytecode: "+bc);
+                return;
+
+            case opc_tableswitch:
+                cases = (u4At(alignedIntOffset(2)) - u4At(alignedIntOffset(1)) + 1);
+                len = alignedIntOffset(3 + cases*1);
+                return;
+
+            case opc_lookupswitch:
+                cases = u4At(alignedIntOffset(1));
+                len = alignedIntOffset(2 + cases*2);
+                return;
+
+            default:
+                throw new RuntimeException("unknown bytecode: "+bc);
+            }
+        }
+        // switch code
+        // clget the Nth int (where 0 is the first after the opcode itself)
+        public int alignedIntOffset(int n) {
+            int pos = pc + 1;
+            pos += ((-pos) & 0x03);  // align it
+            pos += (n * 4);
+            return pos - pc;
+        }
+        public int u1At(int pos) {
+            return (codeBase[pc+pos] & 0xFF);
+        }
+        public int u2At(int pos) {
+            return (u1At(pos+0)<<8) + u1At(pos+1);
+        }
+        public int u4At(int pos) {
+            return (u2At(pos+0)<<16) + u2At(pos+2);
+        }
+        public void u1AtPut(int pos, int x) {
+            codeBase[pc+pos] = (byte)x;
+        }
+        public void u2AtPut(int pos, int x) {
+            codeBase[pc+pos+0] = (byte)(x >> 8);
+            codeBase[pc+pos+1] = (byte)(x >> 0);
+        }
+    }
+
+    static String simplifyType(String type) {
+        String simpleType = OBJ_SIGNATURE.matcher(type).replaceAll("L");
+        assert(simpleType.matches("^\\([A-Z]*\\)[A-Z]$"));
+        // change (DD)D to (D_D_)D_
+        simpleType = WIDE_SIGNATURE.matcher(simpleType).replaceAll("\\0_");
+        return simpleType;
+    }
+    static int argsize(String type) {
+        return simplifyType(type).length()-3;
+    }
+    private static final Pattern OBJ_SIGNATURE = Pattern.compile("\\[*L[^;]*;|\\[+[A-Z]");
+    private static final Pattern WIDE_SIGNATURE = Pattern.compile("[JD]");
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/LoadClass.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.tools;
+
+import java.io.File;
+import vm.share.UnsafeAccess;
+import vm.share.FileUtils;
+import vm.mlvm.share.CustomClassLoaders;
+import vm.mlvm.anonloader.share.AnonkTestee01;
+
+import vm.mlvm.share.Env;
+
+/**
+ * A tool, which loads a class file specified in command line into VM using:
+ * <ul>
+ *   <li>A custom class loader,
+ *   <li>{@link sun.misc.Unsafe#defineAnonymousClass(Class, byte[], Object[])}
+ *   call.
+ * </ul>
+ *
+ * <p>Syntax:
+ * <pre>{@code
+ * $ java [options...] vm.mlvm.tool.LoadClass class-file-name [class-FQDN]
+ * }</pre>
+ *
+ * The first argument, class file name is mandatory.
+ * The second one is optional &mdash; a fully qualified class name.
+ * If the second argument is not specified, it is constructed from the first
+ * argument, replacing '/' with '.'
+ *
+ * <p>The tool can be used for investigating failures of vm.mlvm.anon tests.
+ *
+ */
+public class LoadClass {
+
+    private static final Class<?> HOST_CLASS = AnonkTestee01.class;
+
+    private static void usage() {
+        System.out.println("Usage: java " + LoadClass.class.getName()
+                + " <class-file-to-load> [class-name]");
+    }
+
+    /**
+     * Runs the tool.
+     * @param args Tool arguments
+     */
+    @SuppressWarnings("deprecation")
+    public static void main(String[] args) {
+        if (args.length < 1) {
+            usage();
+            System.exit(1);
+        }
+
+        try {
+            final String classFileName = args[0];
+            final String className = (args.length > 1) ? args[1]
+                    : classFileName.replaceAll("\\.class$", "")
+                            .replace("/", ".");
+            final byte[] classBytes = FileUtils
+                    .readFile(new File(classFileName));
+
+            Env.traceImportant("Loading class '%s' from file '%s'...",
+                    className, classFileName);
+
+            Env.traceImportant("...using custom ClassLoader");
+            try {
+                ClassLoader cl = CustomClassLoaders
+                        .makeClassBytesLoader(classBytes, className);
+                Class<?> c = cl.loadClass(className);
+                c.newInstance();
+                Env.traceImportant("OK");
+            } catch (Throwable e) {
+                Env.traceImportant(e,
+                        "Couldn't load class '%s' via custom ClassLoader",
+                        classFileName);
+            }
+
+            Env.traceImportant(
+                    "...using sun.misc.Unsafe.defineAnonymousClass():");
+            try {
+                Class<?> c = UnsafeAccess.unsafe.defineAnonymousClass(HOST_CLASS,
+                        classBytes, new Object[0]);
+                c.newInstance();
+                Env.traceImportant("OK");
+            } catch (Throwable e) {
+                Env.traceImportant(e, "Couldn't load class '%s' via sun.misc."
+                        + "Unsafe.defineAnonymousClass()", classFileName);
+            }
+        } catch (Throwable e) {
+            Env.traceImportant(e, "Can't load class");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/StratumAP.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.tools;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Set;
+import java.io.File;
+
+import javax.annotation.processing.AbstractProcessor;
+import javax.annotation.processing.Filer;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.annotation.processing.RoundEnvironment;
+import javax.annotation.processing.SupportedAnnotationTypes;
+import javax.annotation.processing.SupportedSourceVersion;
+import javax.lang.model.SourceVersion;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.TypeElement;
+import javax.tools.FileObject;
+import javax.tools.StandardLocation;
+
+import nsk.share.jdi.sde.SmapGenerator;
+import nsk.share.jdi.sde.SmapStratum;
+import vm.mlvm.share.Stratum;
+import vm.mlvm.tools.StratumAPTreeVisitor.StratumLineInfo;
+
+import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.util.TreePath;
+import com.sun.source.util.Trees;
+
+@SupportedAnnotationTypes("vm.mlvm.share.Stratum")
+public class StratumAP extends AbstractProcessor {
+
+    public static final String SMAP_EXT = ".smap";
+    private boolean verbose = false;
+
+    private Trees trees;
+    @Override
+    public synchronized void init(ProcessingEnvironment processingEnv) {
+        super.init(processingEnv);
+        trees = Trees.instance(processingEnv);
+        verbose = Boolean.parseBoolean(processingEnv.getOptions().get("verbose"));
+    }
+
+    public SourceVersion getSupportedSourceVersion() {
+        return SourceVersion.latest();
+    }
+
+    @Override
+    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+        if (roundEnv.processingOver()) {
+            return true;
+        }
+
+        for (Element e : roundEnv.getElementsAnnotatedWith(Stratum.class)) {
+            Stratum s = e.getAnnotation(Stratum.class);
+            if (s == null) {
+                continue;
+            }
+
+            TreePath tp = trees.getPath(e);
+
+            StratumAPTreeVisitor visitor = new StratumAPTreeVisitor();
+            visitor.scan(tp, trees);
+
+            String stratumName = s.stratumName();
+            String stratumSourceFileName = s.stratumSourceFileName();
+
+            SmapStratum st = new SmapStratum(stratumName);
+            st.addFile(stratumSourceFileName);
+
+            Set<StratumLineInfo> lines = visitor.strata.get(stratumName);
+            StringBuffer stratumSource = new StringBuffer();
+            if (lines != null) {
+                int curStratumLine = 1;
+                for (StratumLineInfo lineInfo : lines) {
+                    for (int i = -1; i <= 1; i++)
+                        st.addLineData(curStratumLine,
+                                       stratumSourceFileName,
+                                       1,
+                                       lineInfo.getJavaLineNum() + i,
+                                       1);
+
+                    stratumSource.append(lineInfo.getStratumSourceLine()).append("\n");
+                    ++curStratumLine;
+                }
+            }
+
+            if (verbose) {
+                System.out.println("Strata:\n" + visitor.strata + "\n\nSource:\n" + stratumSource);
+            }
+
+            CompilationUnitTree compUnit = tp.getCompilationUnit();
+            String pkgName = compUnit.getPackageName().toString();
+            Filer filer = processingEnv.getFiler();
+
+            SmapGenerator gen = new SmapGenerator();
+            gen.addStratum(st, false);
+
+            try {
+                FileObject stratumFile = filer.createResource(StandardLocation.CLASS_OUTPUT, pkgName, stratumSourceFileName, e);
+
+                if (verbose) {
+                    System.out.println("Writing " + stratumFile.toUri());
+                }
+
+                Writer writer = stratumFile.openWriter();
+                try {
+                    writer.append(stratumSource);
+                } finally {
+                    writer.close();
+                }
+            } catch (IOException ioe) {
+                ioe.printStackTrace();
+                return false;
+            }
+
+            String sourceFileName =
+                compUnit.getSourceFile().getName()
+                .replaceAll("^.*\\" + File.separatorChar, "");
+
+            gen.setOutputFileName(sourceFileName);
+
+            if (verbose) {
+                System.out.println(gen.getString() + "\n");
+            }
+
+            String smapFileName =
+                sourceFileName
+                .replaceAll("\\..*$", "")
+                + SMAP_EXT;
+
+            try {
+                FileObject smapFile = filer.createResource(StandardLocation.CLASS_OUTPUT, pkgName, smapFileName, e);
+
+                if (verbose) {
+                    System.out.println("Writing " + smapFile.toUri());
+                }
+
+                Writer writer = smapFile.openWriter();
+                try {
+                    writer.append(gen.getString());
+                } finally {
+                    writer.close();
+                }
+            } catch (IOException ioe) {
+                ioe.printStackTrace();
+                return false;
+            }
+        }
+
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/tools/StratumAPTreeVisitor.java	Thu May 17 00:23:28 2018 -0700
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package vm.mlvm.tools;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.tree.LabeledStatementTree;
+import com.sun.source.util.TreePathScanner;
+import com.sun.source.util.Trees;
+
+public class StratumAPTreeVisitor extends TreePathScanner<Object, Trees> {
+    public static final String LABEL_PREFIX = "Stratum_";
+
+    public static class StratumLineInfo implements Comparable<StratumLineInfo> {
+        String stratumName;
+        int stratumLineOrder;
+        String stratumLine;
+        int javaLineNum;
+
+        public StratumLineInfo(String stratumName, int stratumLineOrder, String stratumLine, int javaLineNum) {
+            this.stratumName = stratumName;
+            this.stratumLineOrder = stratumLineOrder;
+            this.stratumLine = stratumLine;
+            this.javaLineNum = javaLineNum;
+        }
+
+        public String getStratumName() {
+            return stratumName;
+        }
+
+        public int getStratumLineOrder() {
+            return stratumLineOrder;
+        }
+
+        public String getStratumSourceLine() {
+            return stratumLine;
+        }
+
+        public int getJavaLineNum() {
+            return javaLineNum;
+        }
+
+        @Override
+        public int compareTo(StratumLineInfo o) {
+            int i;
+            if ( (i = getStratumName().compareTo(o.getStratumName())) != 0 )
+                return i;
+
+            if ( (i = getStratumLineOrder() - o.getStratumLineOrder()) != 0 )
+                return i;
+
+            return 0;
+        }
+
+        @Override
+        public String toString() {
+            return getStratumName() + ":" + getStratumLineOrder()
+                 + " =>  Java:" + getJavaLineNum()
+                 + " [" + getStratumSourceLine() + "]";
+        }
+    }
+
+    public Map<String, Set<StratumLineInfo>> strata = new HashMap<String, Set<StratumLineInfo>>();
+
+    @Override
+    public Object visitLabeledStatement(LabeledStatementTree node, Trees p) {
+        processLabel(node, p);
+        return super.visitLabeledStatement(node, p);
+    }
+
+    private void processLabel(LabeledStatementTree node, Trees p) {
+        String label = node.getLabel().toString();
+
+        if ( ! label.startsWith(LABEL_PREFIX) )
+            return;
+
+        int stratumNameEndPos = label.indexOf('_', LABEL_PREFIX.length());
+        if ( stratumNameEndPos == -1 )
+            return;
+
+        String stratumName = label.substring(LABEL_PREFIX.length(), stratumNameEndPos);
+
+        int stratumLineEndPos = label.indexOf('_', stratumNameEndPos + 1);
+        if ( stratumLineEndPos == -1 )
+            return;
+
+        String stratumLineNumStr = label.substring(stratumNameEndPos + 1, stratumLineEndPos);
+        int stratumLineNum = Integer.parseInt(stratumLineNumStr);
+
+        String stratumLine = label.substring(stratumLineEndPos + 1);
+
+        CompilationUnitTree unit = getCurrentPath().getCompilationUnit();
+        int javaLineNum = (int) unit.getLineMap().getLineNumber(p.getSourcePositions().getStartPosition(unit, node));
+
+        Set<StratumLineInfo> stratumLines = this.strata.get(stratumName);
+        if ( stratumLines == null ) {
+            stratumLines = new TreeSet<StratumLineInfo>();
+            this.strata.put(stratumName, stratumLines);
+        }
+
+        stratumLines.add(new StratumLineInfo(stratumName, stratumLineNum, stratumLine, javaLineNum));
+    }
+}