From cd646dcdef9ffda0c5baa99f8729a3f565f3e266 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 18 Sep 2025 12:49:14 +0200 Subject: [PATCH] Java: add JavaColorProvider performance test (IDEA-375485) GitOrigin-RevId: e7be60981f8a7f6c5ce3b89396a2c908a92f52b0 --- .../codeInsight/colors/LargeArrayLiteral.java | 391 ++++++++++++++++++ .../JavaColorProviderPerformanceTest.java | 43 ++ 2 files changed, 434 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/colors/LargeArrayLiteral.java create mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/colors/JavaColorProviderPerformanceTest.java diff --git a/java/java-tests/testData/codeInsight/colors/LargeArrayLiteral.java b/java/java-tests/testData/codeInsight/colors/LargeArrayLiteral.java new file mode 100644 index 000000000000..3e790a9e6242 --- /dev/null +++ b/java/java-tests/testData/codeInsight/colors/LargeArrayLiteral.java @@ -0,0 +1,391 @@ +import java.awt.Color; + +public class LargeArrayLiteral { + Color color = new Color(12, 23, 123); + + public static class Node { + } + + public static class NodeLevel1_0000 extends Node { + } + + public static class NodeLevel1_0001 extends Node { + } + + public static class NodeLevel1_0010 extends Node { + } + + public static class NodeLevel1_0011 extends Node { + } + + public static class NodeLevel1_0100 extends Node { + } + + public static class NodeLevel1_0101 extends Node { + } + + public static class NodeLevel1_0110 extends Node { + } + + public static class NodeLevel1_0111 extends Node { + } + + public static class NodeLevel1_1000 extends Node { + } + + public static class NodeLevel1_1001 extends Node { + } + + public static class NodeLevel1_1010 extends Node { + } + + public static class NodeLevel1_1011 extends Node { + } + + public static class NodeLevel1_1100 extends Node { + } + + public static class NodeLevel1_1101 extends Node { + } + + public static class NodeLevel1_1110 extends Node { + } + + public static class NodeLevel1_1111 extends Node { + } + + public static int getNumeric(Node aNode) { + if (aNode instanceof NodeLevel1_0000) { + return 0; + } + else if (aNode instanceof NodeLevel1_0001) { + return 1; + } + else if (aNode instanceof NodeLevel1_0010) { + return 2; + } + else if (aNode instanceof NodeLevel1_0011) { + return 3; + } + else if (aNode instanceof NodeLevel1_0100) { + return 4; + } + else if (aNode instanceof NodeLevel1_0101) { + return 5; + } + else if (aNode instanceof NodeLevel1_0110) { + return 6; + } + else if (aNode instanceof NodeLevel1_0111) { + return 7; + } + else if (aNode instanceof NodeLevel1_1000) { + return 8; + } + else if (aNode instanceof NodeLevel1_1001) { + return 9; + } + else if (aNode instanceof NodeLevel1_1010) { + return 10; + } + else if (aNode instanceof NodeLevel1_1011) { + return 11; + } + else if (aNode instanceof NodeLevel1_1100) { + return 12; + } + else if (aNode instanceof NodeLevel1_1101) { + return 13; + } + else if (aNode instanceof NodeLevel1_1110) { + return 14; + } + else if (aNode instanceof NodeLevel1_1111) { + return 15; + } + else { + return -1; + } + } + + private static final Node _0 = new NodeLevel1_0000(); + private static final Node _1 = new NodeLevel1_0001(); + private static final Node _2 = new NodeLevel1_0010(); + private static final Node _3 = new NodeLevel1_0011(); + private static final Node _4 = new NodeLevel1_0100(); + private static final Node _5 = new NodeLevel1_0101(); + private static final Node _6 = new NodeLevel1_0110(); + private static final Node _7 = new NodeLevel1_0111(); + private static final Node _8 = new NodeLevel1_1000(); + private static final Node _9 = new NodeLevel1_1001(); + private static final Node _a = new NodeLevel1_1010(); + private static final Node _b = new NodeLevel1_1011(); + private static final Node _c = new NodeLevel1_1100(); + private static final Node _d = new NodeLevel1_1101(); + private static final Node _e = new NodeLevel1_1110(); + private static final Node _f = new NodeLevel1_1111(); + + private static final Node[] PRECALCULATED = { + _0, _0, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _1, _1, _1, _0, _0, _0, _0, _0, _2, _0, _3, _0, _0, _0, _1, _0, _3, _1, _3, _0, _0, + _0, _1, _0, _3, _1, _3, _0, _1, _1, _0, _1, _3, _1, _2, _0, _2, _0, _3, _2, _1, _3, _1, _0, _3, _1, _2, _3, _1, _3, _0, _0, _0, _0, _0, + _0, _2, _0, _3, _0, _0, _0, _1, _0, _3, _1, _3, _0, _2, _0, _2, _2, _0, _2, _1, _0, _2, _0, _3, _2, _1, _3, _1, _0, _2, _0, _3, _2, _1, + _3, _1, _0, _3, _1, _2, _3, _1, _3, _0, _2, _0, _2, _1, _0, _1, _1, _1, _2, _1, _3, _0, _1, _1, _1, _0, + _0, _0, _0, _1, _0, _3, _1, _3, _0, _1, _1, _0, _9, _b, _9, _a, _0, _2, _0, _3, _2, _3, _3, _3, _0, _3, _1, _2, _b, _b, _b, _a, _0, _3, + _1, _2, _3, _3, _3, _2, _1, _2, _0, _2, _b, _a, _a, _a, _2, _3, _3, _2, _3, _1, _3, _0, _3, _2, _2, _2, _b, _8, _a, _8, _0, _2, _0, _3, + _6, _7, _7, _7, _0, _3, _1, _2, _f, _f, _f, _e, _2, _2, _2, _3, _6, _5, _7, _5, _2, _3, _3, _2, _f, _d, _f, _c, _2, _3, _3, _2, _7, _5, + _7, _4, _3, _2, _2, _2, _f, _c, _e, _c, _2, _1, _3, _0, _5, _5, _5, _4, _3, _0, _2, _0, _d, _c, _c, _c, + _0, _0, _0, _0, _0, _2, _0, _3, _0, _0, _0, _1, _0, _3, _1, _3, _0, _2, _0, _2, _2, _0, _2, _1, _0, _2, _0, _3, _2, _1, _3, _1, _0, _2, + _0, _3, _2, _1, _3, _1, _0, _3, _1, _2, _3, _1, _3, _0, _2, _0, _2, _1, _0, _1, _1, _1, _2, _1, _3, _0, _1, _1, _1, _0, _0, _2, _0, _2, + _6, _4, _6, _5, _0, _2, _0, _3, _6, _5, _7, _5, _2, _0, _2, _0, _4, _4, _4, _5, _2, _0, _2, _1, _4, _5, _5, _5, _2, _0, _2, _1, _4, _5, + _5, _5, _2, _1, _3, _0, _5, _5, _5, _4, _0, _0, _0, _1, _4, _5, _5, _5, _0, _1, _1, _0, _5, _5, _5, _4, + _0, _2, _0, _3, _6, _7, _7, _7, _0, _3, _1, _2, _f, _f, _f, _e, _2, _2, _2, _3, _6, _5, _7, _5, _2, _3, _3, _2, _f, _d, _f, _c, _2, _3, + _3, _2, _7, _5, _7, _4, _3, _2, _2, _2, _f, _c, _e, _c, _2, _1, _3, _0, _5, _5, _5, _4, _3, _0, _2, _0, _d, _c, _c, _c, _6, _6, _6, _7, + _2, _1, _3, _1, _6, _7, _7, _6, _b, _9, _b, _8, _6, _4, _6, _5, _0, _1, _1, _1, _6, _5, _7, _4, _9, _9, _9, _8, _6, _5, _7, _4, _1, _1, + _1, _0, _7, _4, _6, _4, _9, _8, _8, _8, _4, _5, _5, _4, _1, _1, _1, _0, _5, _4, _4, _4, _9, _8, _8, _8, + _0, _0, _0, _1, _0, _3, _1, _3, _0, _1, _1, _0, _9, _b, _9, _a, _0, _2, _0, _3, _2, _1, _3, _1, _0, _3, _1, _2, _b, _9, _b, _8, _0, _3, + _1, _2, _3, _1, _3, _0, _1, _2, _0, _2, _b, _8, _a, _8, _2, _1, _3, _0, _1, _1, _1, _0, _3, _0, _2, _0, _9, _8, _8, _8, _0, _2, _0, _3, + _6, _5, _7, _5, _0, _3, _1, _2, _f, _d, _f, _c, _2, _0, _2, _1, _4, _5, _5, _5, _2, _1, _3, _0, _d, _d, _d, _c, _2, _1, _3, _0, _5, _5, + _5, _4, _3, _0, _2, _0, _d, _c, _c, _c, _0, _1, _1, _0, _5, _5, _5, _4, _1, _0, _0, _0, _d, _c, _c, _c, + _0, _3, _1, _2, _f, _f, _f, _e, _9, _a, _8, _a, _7, _6, _6, _6, _2, _3, _3, _2, _f, _d, _f, _c, _b, _a, _a, _a, _7, _4, _6, _4, _3, _2, + _2, _2, _f, _c, _e, _c, _a, _a, _a, _a, _6, _4, _6, _4, _3, _0, _2, _0, _d, _c, _c, _c, _a, _8, _a, _8, _4, _4, _4, _4, _6, _7, _7, _6, + _f, _d, _f, _c, _f, _e, _e, _e, _7, _4, _6, _4, _6, _5, _7, _4, _d, _d, _d, _c, _f, _c, _e, _c, _5, _4, _4, _4, _7, _4, _6, _4, _d, _c, + _c, _c, _e, _c, _e, _c, _4, _4, _4, _4, _5, _4, _4, _4, _d, _c, _c, _c, _c, _c, _c, _c, _4, _4, _4, _4, + _4, _4, _4, _4, _8, _a, _8, _b, _c, _c, _c, _d, _0, _3, _1, _3, _4, _6, _4, _6, _a, _8, _a, _9, _c, _e, _c, _f, _2, _1, _3, _1, _4, _6, + _4, _7, _a, _9, _b, _9, _c, _f, _d, _e, _3, _1, _3, _0, _6, _4, _6, _5, _8, _9, _9, _9, _e, _d, _f, _c, _1, _1, _1, _0, _0, _2, _0, _2, + _a, _8, _a, _9, _8, _a, _8, _b, _2, _1, _3, _1, _2, _0, _2, _0, _8, _8, _8, _9, _a, _8, _a, _9, _0, _1, _1, _1, _2, _0, _2, _1, _8, _9, + _9, _9, _a, _9, _b, _8, _1, _1, _1, _0, _0, _0, _0, _1, _8, _9, _9, _9, _8, _9, _9, _8, _1, _1, _1, _0, + _8, _a, _8, _b, _2, _3, _3, _3, _0, _3, _1, _2, _3, _3, _3, _2, _a, _a, _a, _b, _2, _1, _3, _1, _2, _3, _3, _2, _3, _1, _3, _0, _a, _b, + _b, _a, _3, _1, _3, _0, _3, _2, _2, _2, _3, _0, _2, _0, _a, _9, _b, _8, _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _a, _a, _a, _b, + _2, _1, _3, _1, _2, _3, _3, _2, _3, _1, _3, _0, _a, _8, _a, _9, _0, _1, _1, _1, _2, _1, _3, _0, _1, _1, _1, _0, _a, _9, _b, _8, _1, _1, + _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _8, _9, _9, _8, _1, _1, _1, _0, _1, _0, _0, _0, _1, _0, _0, _0, + _c, _c, _c, _d, _4, _7, _5, _7, _4, _5, _5, _4, _5, _7, _5, _6, _c, _e, _c, _f, _6, _5, _7, _5, _4, _7, _5, _6, _7, _5, _7, _4, _c, _f, + _d, _e, _7, _5, _7, _4, _5, _6, _4, _6, _7, _4, _6, _4, _e, _d, _f, _c, _5, _5, _5, _4, _7, _4, _6, _4, _5, _4, _4, _4, _c, _e, _c, _f, + _2, _1, _3, _1, _4, _7, _5, _6, _3, _1, _3, _0, _e, _c, _e, _d, _0, _1, _1, _1, _6, _5, _7, _4, _1, _1, _1, _0, _e, _d, _f, _c, _1, _1, + _1, _0, _7, _4, _6, _4, _1, _0, _0, _0, _c, _d, _d, _c, _1, _1, _1, _0, _5, _4, _4, _4, _1, _0, _0, _0, + _4, _7, _5, _6, _3, _3, _3, _2, _5, _6, _4, _6, _3, _2, _2, _2, _6, _7, _7, _6, _3, _1, _3, _0, _7, _6, _6, _6, _3, _0, _2, _0, _7, _6, + _6, _6, _3, _0, _2, _0, _6, _6, _6, _6, _2, _0, _2, _0, _7, _4, _6, _4, _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _2, _3, _3, _2, + _3, _1, _3, _0, _3, _2, _2, _2, _3, _0, _2, _0, _2, _1, _3, _0, _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _3, _0, _2, _0, _1, _0, + _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _c, _e, _c, _f, _2, _1, _3, _1, _4, _7, _5, _6, _3, _1, _3, _0, _e, _c, _e, _d, _0, _1, _1, _1, _6, _5, _7, _4, _1, _1, _1, _0, _e, _d, + _f, _c, _1, _1, _1, _0, _7, _4, _6, _4, _1, _0, _0, _0, _c, _d, _d, _c, _1, _1, _1, _0, _5, _4, _4, _4, _1, _0, _0, _0, _a, _8, _a, _9, + _0, _1, _1, _1, _2, _1, _3, _0, _1, _1, _1, _0, _8, _8, _8, _9, _0, _1, _1, _1, _0, _1, _1, _0, _1, _1, _1, _0, _8, _9, _9, _8, _1, _1, + _1, _0, _1, _0, _0, _0, _1, _0, _0, _0, _8, _9, _9, _8, _1, _1, _1, _0, _1, _0, _0, _0, _1, _0, _0, _0, + _2, _3, _3, _2, _3, _1, _3, _0, _3, _2, _2, _2, _3, _0, _2, _0, _2, _1, _3, _0, _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _3, _0, + _2, _0, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _2, _1, _3, _0, + _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _0, _1, _1, _0, _1, _1, _1, _0, _1, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _1, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _1, _8, _b, _9, _b, _8, _9, _9, _8, _9, _b, _9, _a, _0, _2, _0, _3, _a, _9, _b, _9, _8, _b, _9, _a, _b, _9, _b, _8, _0, _3, + _1, _2, _b, _9, _b, _8, _9, _a, _8, _a, _b, _8, _a, _8, _2, _1, _3, _0, _9, _9, _9, _8, _b, _8, _a, _8, _9, _8, _8, _8, _0, _2, _0, _3, + _e, _d, _f, _d, _8, _b, _9, _a, _f, _d, _f, _c, _2, _0, _2, _1, _c, _d, _d, _d, _a, _9, _b, _8, _d, _d, _d, _c, _2, _1, _3, _0, _d, _d, + _d, _c, _b, _8, _a, _8, _d, _c, _c, _c, _0, _1, _1, _0, _d, _d, _d, _c, _9, _8, _8, _8, _d, _c, _c, _c, + _8, _b, _9, _a, _f, _f, _f, _e, _9, _a, _8, _a, _7, _6, _6, _6, _a, _b, _b, _a, _f, _d, _f, _c, _b, _a, _a, _a, _7, _4, _6, _4, _b, _a, + _a, _a, _f, _c, _e, _c, _a, _a, _a, _a, _6, _4, _6, _4, _b, _8, _a, _8, _d, _c, _c, _c, _a, _8, _a, _8, _4, _4, _4, _4, _e, _f, _f, _e, + _b, _9, _b, _8, _f, _e, _e, _e, _3, _0, _2, _0, _e, _d, _f, _c, _9, _9, _9, _8, _f, _c, _e, _c, _1, _0, _0, _0, _f, _c, _e, _c, _9, _8, + _8, _8, _e, _c, _e, _c, _0, _0, _0, _0, _d, _c, _c, _c, _9, _8, _8, _8, _c, _c, _c, _c, _0, _0, _0, _0, + _0, _2, _0, _3, _e, _d, _f, _d, _8, _b, _9, _a, _f, _d, _f, _c, _2, _0, _2, _1, _c, _d, _d, _d, _a, _9, _b, _8, _d, _d, _d, _c, _2, _1, + _3, _0, _d, _d, _d, _c, _b, _8, _a, _8, _d, _c, _c, _c, _0, _1, _1, _0, _d, _d, _d, _c, _9, _8, _8, _8, _d, _c, _c, _c, _6, _4, _6, _5, + _8, _9, _9, _9, _e, _d, _f, _c, _9, _9, _9, _8, _4, _4, _4, _5, _8, _9, _9, _9, _c, _d, _d, _c, _9, _9, _9, _8, _4, _5, _5, _4, _9, _9, + _9, _8, _d, _c, _c, _c, _9, _8, _8, _8, _4, _5, _5, _4, _9, _9, _9, _8, _d, _c, _c, _c, _9, _8, _8, _8, + _e, _f, _f, _e, _b, _9, _b, _8, _f, _e, _e, _e, _3, _0, _2, _0, _e, _d, _f, _c, _9, _9, _9, _8, _f, _c, _e, _c, _1, _0, _0, _0, _f, _c, + _e, _c, _9, _8, _8, _8, _e, _c, _e, _c, _0, _0, _0, _0, _d, _c, _c, _c, _9, _8, _8, _8, _c, _c, _c, _c, _0, _0, _0, _0, _a, _9, _b, _8, + _9, _9, _9, _8, _b, _8, _a, _8, _1, _0, _0, _0, _8, _9, _9, _8, _9, _9, _9, _8, _9, _8, _8, _8, _1, _0, _0, _0, _9, _8, _8, _8, _9, _8, + _8, _8, _8, _8, _8, _8, _0, _0, _0, _0, _9, _8, _8, _8, _9, _8, _8, _8, _8, _8, _8, _8, _0, _0, _0, _0, + _8, _b, _9, _a, _f, _d, _f, _c, _9, _a, _8, _a, _7, _4, _6, _4, _a, _9, _b, _8, _d, _d, _d, _c, _b, _8, _a, _8, _5, _4, _4, _4, _b, _8, + _a, _8, _d, _c, _c, _c, _a, _8, _a, _8, _4, _4, _4, _4, _9, _8, _8, _8, _d, _c, _c, _c, _8, _8, _8, _8, _4, _4, _4, _4, _e, _d, _f, _c, + _d, _d, _d, _c, _f, _c, _e, _c, _5, _4, _4, _4, _c, _d, _d, _c, _d, _d, _d, _c, _d, _c, _c, _c, _5, _4, _4, _4, _d, _c, _c, _c, _d, _c, + _c, _c, _c, _c, _c, _c, _4, _4, _4, _4, _d, _c, _c, _c, _d, _c, _c, _c, _c, _c, _c, _c, _4, _4, _4, _4, + _f, _e, _e, _e, _7, _4, _6, _4, _6, _6, _6, _6, _6, _4, _6, _4, _f, _c, _e, _c, _5, _4, _4, _4, _6, _4, _6, _4, _4, _4, _4, _4, _e, _c, + _e, _c, _4, _4, _4, _4, _6, _4, _6, _4, _4, _4, _4, _4, _c, _c, _c, _c, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _f, _c, _e, _c, + _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _d, _c, _c, _c, _1, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _c, _c, _c, _c, _0, _0, + _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _c, _c, _c, _c, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, + _c, _f, _d, _e, _b, _b, _b, _a, _d, _e, _c, _e, _3, _2, _2, _2, _e, _f, _f, _e, _b, _9, _b, _8, _f, _e, _e, _e, _3, _0, _2, _0, _f, _e, + _e, _e, _b, _8, _a, _8, _e, _e, _e, _e, _2, _0, _2, _0, _f, _c, _e, _c, _9, _8, _8, _8, _e, _c, _e, _c, _0, _0, _0, _0, _a, _b, _b, _a, + _b, _9, _b, _8, _b, _a, _a, _a, _3, _0, _2, _0, _a, _9, _b, _8, _9, _9, _9, _8, _b, _8, _a, _8, _1, _0, _0, _0, _b, _8, _a, _8, _9, _8, + _8, _8, _a, _8, _a, _8, _0, _0, _0, _0, _9, _8, _8, _8, _9, _8, _8, _8, _8, _8, _8, _8, _0, _0, _0, _0, + _4, _6, _4, _7, _a, _9, _b, _9, _c, _f, _d, _e, _b, _9, _b, _8, _6, _4, _6, _5, _8, _9, _9, _9, _e, _d, _f, _c, _9, _9, _9, _8, _6, _5, + _7, _4, _9, _9, _9, _8, _f, _c, _e, _c, _9, _8, _8, _8, _4, _5, _5, _4, _9, _9, _9, _8, _d, _c, _c, _c, _9, _8, _8, _8, _2, _0, _2, _1, + _8, _9, _9, _9, _a, _9, _b, _8, _9, _9, _9, _8, _0, _0, _0, _1, _8, _9, _9, _9, _8, _9, _9, _8, _9, _9, _9, _8, _0, _1, _1, _0, _9, _9, + _9, _8, _9, _8, _8, _8, _9, _8, _8, _8, _0, _1, _1, _0, _9, _9, _9, _8, _9, _8, _8, _8, _9, _8, _8, _8, + _a, _b, _b, _a, _b, _9, _b, _8, _b, _a, _a, _a, _3, _0, _2, _0, _a, _9, _b, _8, _9, _9, _9, _8, _b, _8, _a, _8, _1, _0, _0, _0, _b, _8, + _a, _8, _9, _8, _8, _8, _a, _8, _a, _8, _0, _0, _0, _0, _9, _8, _8, _8, _9, _8, _8, _8, _8, _8, _8, _8, _0, _0, _0, _0, _a, _9, _b, _8, + _9, _9, _9, _8, _b, _8, _a, _8, _1, _0, _0, _0, _8, _9, _9, _8, _9, _9, _9, _8, _9, _8, _8, _8, _1, _0, _0, _0, _9, _8, _8, _8, _9, _8, + _8, _8, _8, _8, _8, _8, _0, _0, _0, _0, _9, _8, _8, _8, _9, _8, _8, _8, _8, _8, _8, _8, _0, _0, _0, _0, + _f, _e, _e, _e, _3, _0, _2, _0, _6, _6, _6, _6, _2, _0, _2, _0, _f, _c, _e, _c, _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _e, _c, + _e, _c, _0, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _c, _c, _c, _c, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _b, _8, _a, _8, + _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _9, _8, _8, _8, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _8, _8, _8, _8, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _8, _8, _8, _8, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _e, _d, _f, _c, _9, _9, _9, _8, _f, _c, _e, _c, _1, _0, _0, _0, _c, _d, _d, _c, _9, _9, _9, _8, _d, _c, _c, _c, _1, _0, _0, _0, _d, _c, + _c, _c, _9, _8, _8, _8, _c, _c, _c, _c, _0, _0, _0, _0, _d, _c, _c, _c, _9, _8, _8, _8, _c, _c, _c, _c, _0, _0, _0, _0, _8, _9, _9, _8, + _9, _9, _9, _8, _9, _8, _8, _8, _1, _0, _0, _0, _8, _9, _9, _8, _9, _9, _9, _8, _9, _8, _8, _8, _1, _0, _0, _0, _9, _8, _8, _8, _9, _8, + _8, _8, _8, _8, _8, _8, _0, _0, _0, _0, _9, _8, _8, _8, _9, _8, _8, _8, _8, _8, _8, _8, _0, _0, _0, _0, + _b, _8, _a, _8, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _9, _8, _8, _8, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _8, _8, + _8, _8, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _8, _8, _8, _8, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _9, _8, _8, _8, + _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _9, _8, _8, _8, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _8, _8, _8, _8, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _8, _8, _8, _8, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _8, _8, _8, _9, _c, _f, _d, _f, _8, _9, _9, _8, _5, _7, _5, _6, _8, _a, _8, _b, _e, _d, _f, _d, _8, _b, _9, _a, _7, _5, _7, _4, _8, _b, + _9, _a, _f, _d, _f, _c, _9, _a, _8, _a, _7, _4, _6, _4, _a, _9, _b, _8, _d, _d, _d, _c, _b, _8, _a, _8, _5, _4, _4, _4, _c, _e, _c, _f, + _a, _9, _b, _9, _c, _f, _d, _e, _3, _1, _3, _0, _e, _c, _e, _d, _8, _9, _9, _9, _e, _d, _f, _c, _1, _1, _1, _0, _e, _d, _f, _c, _9, _9, + _9, _8, _f, _c, _e, _c, _1, _0, _0, _0, _c, _d, _d, _c, _9, _9, _9, _8, _d, _c, _c, _c, _1, _0, _0, _0, + _c, _f, _d, _e, _3, _3, _3, _2, _5, _6, _4, _6, _3, _2, _2, _2, _e, _f, _f, _e, _3, _1, _3, _0, _7, _6, _6, _6, _3, _0, _2, _0, _f, _e, + _e, _e, _3, _0, _2, _0, _6, _6, _6, _6, _2, _0, _2, _0, _f, _c, _e, _c, _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _a, _b, _b, _a, + _3, _1, _3, _0, _3, _2, _2, _2, _3, _0, _2, _0, _a, _9, _b, _8, _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _b, _8, _a, _8, _1, _0, + _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _9, _8, _8, _8, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _c, _e, _c, _f, _a, _9, _b, _9, _c, _f, _d, _e, _3, _1, _3, _0, _e, _c, _e, _d, _8, _9, _9, _9, _e, _d, _f, _c, _1, _1, _1, _0, _e, _d, + _f, _c, _9, _9, _9, _8, _f, _c, _e, _c, _1, _0, _0, _0, _c, _d, _d, _c, _9, _9, _9, _8, _d, _c, _c, _c, _1, _0, _0, _0, _a, _8, _a, _9, + _8, _9, _9, _9, _a, _9, _b, _8, _1, _1, _1, _0, _8, _8, _8, _9, _8, _9, _9, _9, _8, _9, _9, _8, _1, _1, _1, _0, _8, _9, _9, _8, _9, _9, + _9, _8, _9, _8, _8, _8, _1, _0, _0, _0, _8, _9, _9, _8, _9, _9, _9, _8, _9, _8, _8, _8, _1, _0, _0, _0, + _4, _5, _5, _4, _1, _3, _1, _2, _5, _4, _4, _4, _1, _2, _0, _2, _4, _7, _5, _6, _3, _3, _3, _2, _5, _6, _4, _6, _3, _2, _2, _2, _5, _6, + _4, _6, _3, _2, _2, _2, _4, _6, _4, _6, _2, _2, _2, _2, _7, _6, _6, _6, _3, _0, _2, _0, _6, _6, _6, _6, _2, _0, _2, _0, _0, _3, _1, _2, + _3, _3, _3, _2, _1, _2, _0, _2, _3, _2, _2, _2, _2, _3, _3, _2, _3, _1, _3, _0, _3, _2, _2, _2, _3, _0, _2, _0, _3, _2, _2, _2, _3, _0, + _2, _0, _2, _2, _2, _2, _2, _0, _2, _0, _3, _0, _2, _0, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, + _b, _a, _a, _a, _3, _0, _2, _0, _2, _2, _2, _2, _2, _0, _2, _0, _b, _8, _a, _8, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _a, _8, + _a, _8, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _8, _8, _8, _8, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _b, _8, _a, _8, + _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _9, _8, _8, _8, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _8, _8, _8, _8, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _8, _8, _8, _8, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _d, _e, _c, _e, _7, _4, _6, _4, _4, _6, _4, _6, _6, _4, _6, _4, _f, _c, _e, _c, _5, _4, _4, _4, _6, _4, _6, _4, _4, _4, _4, _4, _e, _c, + _e, _c, _4, _4, _4, _4, _6, _4, _6, _4, _4, _4, _4, _4, _c, _c, _c, _c, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _f, _c, _e, _c, + _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _d, _c, _c, _c, _1, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _c, _c, _c, _c, _0, _0, + _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _c, _c, _c, _c, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, + _6, _6, _6, _6, _2, _0, _2, _0, _6, _6, _6, _6, _2, _0, _2, _0, _6, _4, _6, _4, _0, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _6, _4, + _6, _4, _0, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _2, _0, _2, _0, + _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _f, _c, _e, _c, _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _d, _c, _c, _c, _1, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _c, _c, + _c, _c, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _c, _c, _c, _c, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _9, _8, _8, _8, + _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _9, _8, _8, _8, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _8, _8, _8, _8, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _8, _8, _8, _8, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _8, _9, _9, _8, _5, _7, _5, _6, _1, _0, _0, _0, _5, _6, _4, _6, _8, _b, _9, _a, _7, _5, _7, _4, _1, _2, _0, _2, _7, _4, _6, _4, _9, _a, + _8, _a, _7, _4, _6, _4, _0, _2, _0, _2, _6, _4, _6, _4, _b, _8, _a, _8, _5, _4, _4, _4, _2, _0, _2, _0, _4, _4, _4, _4, _c, _f, _d, _e, + _3, _1, _3, _0, _5, _6, _4, _6, _3, _0, _2, _0, _e, _d, _f, _c, _1, _1, _1, _0, _7, _4, _6, _4, _1, _0, _0, _0, _f, _c, _e, _c, _1, _0, + _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _d, _c, _c, _c, _1, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, + _5, _6, _4, _6, _3, _2, _2, _2, _4, _6, _4, _6, _2, _2, _2, _2, _7, _6, _6, _6, _3, _0, _2, _0, _6, _6, _6, _6, _2, _0, _2, _0, _6, _6, + _6, _6, _2, _0, _2, _0, _6, _6, _6, _6, _2, _0, _2, _0, _6, _4, _6, _4, _0, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _3, _2, _2, _2, + _3, _0, _2, _0, _2, _2, _2, _2, _2, _0, _2, _0, _3, _0, _2, _0, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, + _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _c, _f, _d, _e, _3, _1, _3, _0, _5, _6, _4, _6, _3, _0, _2, _0, _e, _d, _f, _c, _1, _1, _1, _0, _7, _4, _6, _4, _1, _0, _0, _0, _f, _c, + _e, _c, _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _d, _c, _c, _c, _1, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _a, _9, _b, _8, + _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _8, _9, _9, _8, _1, _1, _1, _0, _1, _0, _0, _0, _1, _0, _0, _0, _9, _8, _8, _8, _1, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _9, _8, _8, _8, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _3, _2, _2, _2, _3, _0, _2, _0, _2, _2, _2, _2, _2, _0, _2, _0, _3, _0, _2, _0, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, + _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _3, _0, _2, _0, + _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _5, _6, _4, _6, _7, _4, _6, _4, _4, _6, _4, _6, _6, _4, _6, _4, _7, _4, _6, _4, _5, _4, _4, _4, _6, _4, _6, _4, _4, _4, _4, _4, _6, _4, + _6, _4, _4, _4, _4, _4, _6, _4, _6, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _4, _7, _4, _6, _4, + _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _5, _4, _4, _4, _1, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, + _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, + _6, _6, _6, _6, _2, _0, _2, _0, _6, _6, _6, _6, _2, _0, _2, _0, _6, _4, _6, _4, _0, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _6, _4, + _6, _4, _0, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _2, _0, _2, _0, + _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _7, _4, _6, _4, _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _5, _4, _4, _4, _1, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _4, _4, + _4, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _1, _0, _0, _0, + _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _c, _d, _d, _c, _1, _3, _1, _2, _5, _4, _4, _4, _1, _2, _0, _2, _c, _f, _d, _e, _3, _1, _3, _0, _5, _6, _4, _6, _3, _0, _2, _0, _d, _e, + _c, _e, _3, _0, _2, _0, _4, _6, _4, _6, _2, _0, _2, _0, _f, _c, _e, _c, _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _8, _b, _9, _a, + _3, _1, _3, _0, _1, _2, _0, _2, _3, _0, _2, _0, _a, _9, _b, _8, _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _b, _8, _a, _8, _1, _0, + _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _9, _8, _8, _8, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _1, _2, _0, _2, _3, _2, _2, _2, _0, _2, _0, _2, _2, _2, _2, _2, _3, _2, _2, _2, _3, _0, _2, _0, _2, _2, _2, _2, _2, _0, _2, _0, _2, _2, + _2, _2, _2, _0, _2, _0, _2, _2, _2, _2, _2, _0, _2, _0, _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _3, _2, _2, _2, + _3, _0, _2, _0, _2, _2, _2, _2, _2, _0, _2, _0, _3, _0, _2, _0, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, + _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _8, _b, _9, _a, _3, _1, _3, _0, _1, _2, _0, _2, _3, _0, _2, _0, _a, _9, _b, _8, _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _b, _8, + _a, _8, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _9, _8, _8, _8, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _a, _9, _b, _8, + _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _8, _9, _9, _8, _1, _1, _1, _0, _1, _0, _0, _0, _1, _0, _0, _0, _9, _8, _8, _8, _1, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _9, _8, _8, _8, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _3, _2, _2, _2, _3, _0, _2, _0, _2, _2, _2, _2, _2, _0, _2, _0, _3, _0, _2, _0, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, + _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _3, _0, _2, _0, + _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _5, _6, _4, _6, _3, _0, _2, _0, _4, _6, _4, _6, _2, _0, _2, _0, _7, _4, _6, _4, _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _6, _4, + _6, _4, _0, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _3, _0, _2, _0, + _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _2, _2, _2, _2, _2, _0, _2, _0, _2, _2, _2, _2, _2, _0, _2, _0, _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, + _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _2, _0, _2, _0, + _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _3, _0, _2, _0, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _1, _0, _0, _0, + _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _8, _8, _8, _9, _8, _8, _8, _9, _0, _1, _1, _1, _0, _0, _0, _0, _8, _a, _8, _b, _8, _8, _8, _9, _0, _3, _1, _3, _0, _0, + _0, _1, _8, _b, _9, _b, _8, _9, _9, _8, _1, _3, _1, _2, _0, _2, _0, _3, _a, _9, _b, _9, _8, _b, _9, _a, _3, _1, _3, _0, _0, _0, _0, _0, + _c, _e, _c, _f, _8, _8, _8, _9, _4, _7, _5, _7, _0, _2, _0, _2, _e, _c, _e, _d, _8, _a, _8, _b, _6, _5, _7, _5, _0, _2, _0, _3, _e, _d, + _f, _d, _8, _b, _9, _a, _7, _5, _7, _4, _2, _0, _2, _1, _c, _d, _d, _d, _a, _9, _b, _8, _5, _5, _5, _4, + _8, _8, _8, _9, _4, _7, _5, _7, _0, _1, _1, _0, _5, _7, _5, _6, _8, _a, _8, _b, _6, _7, _7, _7, _0, _3, _1, _2, _7, _7, _7, _6, _8, _b, + _9, _a, _7, _7, _7, _6, _1, _2, _0, _2, _7, _6, _6, _6, _a, _b, _b, _a, _7, _5, _7, _4, _3, _2, _2, _2, _7, _4, _6, _4, _c, _e, _c, _f, + _2, _3, _3, _3, _4, _7, _5, _6, _3, _3, _3, _2, _e, _e, _e, _f, _2, _1, _3, _1, _6, _7, _7, _6, _3, _1, _3, _0, _e, _f, _f, _e, _3, _1, + _3, _0, _7, _6, _6, _6, _3, _0, _2, _0, _e, _d, _f, _c, _1, _1, _1, _0, _7, _4, _6, _4, _1, _0, _0, _0, + _0, _0, _0, _0, _c, _e, _c, _f, _8, _8, _8, _9, _4, _7, _5, _7, _0, _2, _0, _2, _e, _c, _e, _d, _8, _a, _8, _b, _6, _5, _7, _5, _0, _2, + _0, _3, _e, _d, _f, _d, _8, _b, _9, _a, _7, _5, _7, _4, _2, _0, _2, _1, _c, _d, _d, _d, _a, _9, _b, _8, _5, _5, _5, _4, _4, _6, _4, _6, + _a, _8, _a, _9, _c, _e, _c, _f, _2, _1, _3, _1, _6, _4, _6, _4, _8, _8, _8, _9, _e, _c, _e, _d, _0, _1, _1, _1, _6, _4, _6, _5, _8, _9, + _9, _9, _e, _d, _f, _c, _1, _1, _1, _0, _4, _4, _4, _5, _8, _9, _9, _9, _c, _d, _d, _c, _1, _1, _1, _0, + _8, _8, _8, _9, _4, _7, _5, _7, _0, _1, _1, _0, _5, _7, _5, _6, _8, _a, _8, _b, _6, _5, _7, _5, _0, _3, _1, _2, _7, _5, _7, _4, _8, _b, + _9, _a, _7, _5, _7, _4, _1, _2, _0, _2, _7, _4, _6, _4, _a, _9, _b, _8, _5, _5, _5, _4, _3, _0, _2, _0, _5, _4, _4, _4, _c, _e, _c, _f, + _6, _5, _7, _5, _4, _7, _5, _6, _7, _5, _7, _4, _e, _c, _e, _d, _4, _5, _5, _5, _6, _5, _7, _4, _5, _5, _5, _4, _e, _d, _f, _c, _5, _5, + _5, _4, _7, _4, _6, _4, _5, _4, _4, _4, _c, _d, _d, _c, _5, _5, _5, _4, _5, _4, _4, _4, _5, _4, _4, _4, + _4, _7, _5, _6, _7, _7, _7, _6, _5, _6, _4, _6, _7, _6, _6, _6, _6, _7, _7, _6, _7, _5, _7, _4, _7, _6, _6, _6, _7, _4, _6, _4, _7, _6, + _6, _6, _7, _4, _6, _4, _6, _6, _6, _6, _6, _4, _6, _4, _7, _4, _6, _4, _5, _4, _4, _4, _6, _4, _6, _4, _4, _4, _4, _4, _6, _7, _7, _6, + _3, _1, _3, _0, _7, _6, _6, _6, _3, _0, _2, _0, _6, _5, _7, _4, _1, _1, _1, _0, _7, _4, _6, _4, _1, _0, _0, _0, _7, _4, _6, _4, _1, _0, + _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _5, _4, _4, _4, _1, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, + _c, _e, _c, _f, _6, _5, _7, _5, _4, _7, _5, _6, _7, _5, _7, _4, _e, _c, _e, _d, _4, _5, _5, _5, _6, _5, _7, _4, _5, _5, _5, _4, _e, _d, + _f, _c, _5, _5, _5, _4, _7, _4, _6, _4, _5, _4, _4, _4, _c, _d, _d, _c, _5, _5, _5, _4, _5, _4, _4, _4, _5, _4, _4, _4, _e, _c, _e, _d, + _0, _1, _1, _1, _6, _5, _7, _4, _1, _1, _1, _0, _c, _c, _c, _d, _0, _1, _1, _1, _4, _5, _5, _4, _1, _1, _1, _0, _c, _d, _d, _c, _1, _1, + _1, _0, _5, _4, _4, _4, _1, _0, _0, _0, _c, _d, _d, _c, _1, _1, _1, _0, _5, _4, _4, _4, _1, _0, _0, _0, + _6, _7, _7, _6, _3, _1, _3, _0, _7, _6, _6, _6, _3, _0, _2, _0, _6, _5, _7, _4, _1, _1, _1, _0, _7, _4, _6, _4, _1, _0, _0, _0, _7, _4, + _6, _4, _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _5, _4, _4, _4, _1, _0, _0, _0, _4, _4, _4, _4, _0, _0, _0, _0, _2, _1, _3, _0, + _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _0, _1, _1, _0, _1, _1, _1, _0, _1, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _1, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _c, _c, _c, _d, _8, _8, _8, _9, _4, _5, _5, _5, _0, _0, _0, _0, _c, _e, _c, _f, _8, _8, _8, _9, _4, _7, _5, _7, _0, _0, + _0, _1, _c, _f, _d, _f, _8, _9, _9, _8, _5, _7, _5, _6, _0, _2, _0, _3, _e, _d, _f, _d, _8, _b, _9, _a, _7, _5, _7, _4, _4, _4, _4, _4, + _8, _a, _8, _b, _c, _c, _c, _d, _0, _3, _1, _3, _4, _6, _4, _6, _a, _8, _a, _9, _c, _e, _c, _f, _2, _1, _3, _1, _4, _6, _4, _7, _a, _9, + _b, _9, _c, _f, _d, _e, _3, _1, _3, _0, _6, _4, _6, _5, _8, _9, _9, _9, _e, _d, _f, _c, _1, _1, _1, _0, + _c, _c, _c, _d, _0, _3, _1, _3, _4, _5, _5, _4, _1, _3, _1, _2, _c, _e, _c, _f, _2, _3, _3, _3, _4, _7, _5, _6, _3, _3, _3, _2, _c, _f, + _d, _e, _3, _3, _3, _2, _5, _6, _4, _6, _3, _2, _2, _2, _e, _f, _f, _e, _3, _1, _3, _0, _7, _6, _6, _6, _3, _0, _2, _0, _8, _a, _8, _b, + _2, _3, _3, _3, _0, _3, _1, _2, _3, _3, _3, _2, _a, _a, _a, _b, _2, _1, _3, _1, _2, _3, _3, _2, _3, _1, _3, _0, _a, _b, _b, _a, _3, _1, + _3, _0, _3, _2, _2, _2, _3, _0, _2, _0, _a, _9, _b, _8, _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, + _4, _4, _4, _4, _8, _a, _8, _b, _c, _c, _c, _d, _0, _3, _1, _3, _4, _6, _4, _6, _a, _8, _a, _9, _c, _e, _c, _f, _2, _1, _3, _1, _4, _6, + _4, _7, _a, _9, _b, _9, _c, _f, _d, _e, _3, _1, _3, _0, _6, _4, _6, _5, _8, _9, _9, _9, _e, _d, _f, _c, _1, _1, _1, _0, _0, _2, _0, _2, + _a, _8, _a, _9, _8, _a, _8, _b, _2, _1, _3, _1, _2, _0, _2, _0, _8, _8, _8, _9, _a, _8, _a, _9, _0, _1, _1, _1, _2, _0, _2, _1, _8, _9, + _9, _9, _a, _9, _b, _8, _1, _1, _1, _0, _0, _0, _0, _1, _8, _9, _9, _9, _8, _9, _9, _8, _1, _1, _1, _0, + _8, _a, _8, _b, _2, _3, _3, _3, _0, _3, _1, _2, _3, _3, _3, _2, _a, _a, _a, _b, _2, _1, _3, _1, _2, _3, _3, _2, _3, _1, _3, _0, _a, _b, + _b, _a, _3, _1, _3, _0, _3, _2, _2, _2, _3, _0, _2, _0, _a, _9, _b, _8, _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _a, _a, _a, _b, + _2, _1, _3, _1, _2, _3, _3, _2, _3, _1, _3, _0, _a, _8, _a, _9, _0, _1, _1, _1, _2, _1, _3, _0, _1, _1, _1, _0, _a, _9, _b, _8, _1, _1, + _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _8, _9, _9, _8, _1, _1, _1, _0, _1, _0, _0, _0, _1, _0, _0, _0, + _c, _c, _c, _d, _4, _7, _5, _7, _4, _5, _5, _4, _5, _7, _5, _6, _c, _e, _c, _f, _6, _5, _7, _5, _4, _7, _5, _6, _7, _5, _7, _4, _c, _f, + _d, _e, _7, _5, _7, _4, _5, _6, _4, _6, _7, _4, _6, _4, _e, _d, _f, _c, _5, _5, _5, _4, _7, _4, _6, _4, _5, _4, _4, _4, _c, _e, _c, _f, + _2, _1, _3, _1, _4, _7, _5, _6, _3, _1, _3, _0, _e, _c, _e, _d, _0, _1, _1, _1, _6, _5, _7, _4, _1, _1, _1, _0, _e, _d, _f, _c, _1, _1, + _1, _0, _7, _4, _6, _4, _1, _0, _0, _0, _c, _d, _d, _c, _1, _1, _1, _0, _5, _4, _4, _4, _1, _0, _0, _0, + _4, _7, _5, _6, _3, _3, _3, _2, _5, _6, _4, _6, _3, _2, _2, _2, _6, _7, _7, _6, _3, _1, _3, _0, _7, _6, _6, _6, _3, _0, _2, _0, _7, _6, + _6, _6, _3, _0, _2, _0, _6, _6, _6, _6, _2, _0, _2, _0, _7, _4, _6, _4, _1, _0, _0, _0, _6, _4, _6, _4, _0, _0, _0, _0, _2, _3, _3, _2, + _3, _1, _3, _0, _3, _2, _2, _2, _3, _0, _2, _0, _2, _1, _3, _0, _1, _1, _1, _0, _3, _0, _2, _0, _1, _0, _0, _0, _3, _0, _2, _0, _1, _0, + _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _1, _2, _0, _2, _3, _0, _2, _0, _0, _2, _0, _2, _2, _0, _2, _0, _3, _0, _2, _0, _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _2, _0, + _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _3, _0, _2, _0, + _1, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _2, _0, _0, _0, _0, _0, _2, _0, _2, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, + _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0, _0 + }; + + public static Node calculate(Node lt, Node rt, Node rb, Node lb) { + int value = getNumeric(lt) << 12 | getNumeric(rt) << 8 | getNumeric(rb) << 4 | getNumeric(lb); + return PRECALCULATED[value]; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/colors/JavaColorProviderPerformanceTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/colors/JavaColorProviderPerformanceTest.java new file mode 100644 index 000000000000..d2bd49e5118e --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/colors/JavaColorProviderPerformanceTest.java @@ -0,0 +1,43 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.java.codeInsight.colors; + +import com.intellij.JavaTestUtil; +import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; +import com.intellij.tools.ide.metrics.benchmark.Benchmark; +import com.intellij.util.ui.ColorIcon; + +/** + * @author Bas Leijdekkers + */ +public final class JavaColorProviderPerformanceTest extends LightJavaCodeInsightFixtureTestCase { + + @Override + protected void setUp() throws Exception { + super.setUp(); + myFixture.addClass("package java.awt;" + + "public class Color {" + + "public Color(int rgb) {}" + + "public Color(int r, int g, int b) {}" + + "public Color(int rgba, boolean hasalpha) {}" + + "public Color(float r, float g, float b) {}" + + "public Color(float r, float g, float b, float a) {}" + + "}"); + } + + @Override + public String getBasePath() { + return JavaTestUtil.getRelativeJavaTestDataPath() + "/codeInsight/colors/"; + } + + public void testLargeArrayLiteral() { + Benchmark.newBenchmark("Large array initializer performance", () -> { + // needs to be inside the benchmark otherwise gutters are cached from the warmup phase. + myFixture.configureByFile(getTestName(false) + ".java"); + + long count = myFixture.findAllGutters().stream() + .filter(g -> g.getIcon() instanceof ColorIcon).count(); + + assertEquals(1, count); + }).start(); + } +}