Giter VIP home page Giter VIP logo

gs-collections's Introduction

GS Collections is now Eclipse Collections

We are pleased to announce that GS Collections has been migrated to the Eclipse Foundation, re-branded as Eclipse Collections.

Eclipse Collections 7.0 has the exact same feature set as GS Collections 7.0.

Going forward, any new features will be developed in Eclipse Collections. We will only port critical bug fixes to GS Collections. To support smooth migration for users, we implemented a conversion application gsc-ec-converter. Please plan your migration accordingly from GS Collections to Eclipse Collections.

GS Collections

GS Collections is a collections framework for Java. It has JDK-compatible List, Set and Map implementations with a rich API and set of utility classes that work with any JDK compatible Collections, Arrays, Maps or Strings. The iteration protocol was inspired by the Smalltalk collection framework. The library modules in GS Collections are compatible with Java 5 (gs-collections-api, gs-collections, and gs-collections-testutils).

Quick Example

GS Collections puts iteration methods on the container types. Lambdas are simulated using anonymous inner classes. Here's a code example that demonstrates the usual style of programming with GS Collections.

MutableList<Person> people = FastList.newListWith(person1, person2, person3);
MutableList<String> sortedLastNames = people.collect(Person.TO_LAST_NAME).sortThis();
System.out.println("Comma separated, sorted last names: " + sortedLastNames.makeString());

Person.TO_LAST_NAME is defined as a constant Function in the Person class.

public static final Function<Person, String> TO_LAST_NAME = new Function<Person, String>()
{
    public String valueOf(Person person)
    {
        return person.lastName;
    }
};

In Java 8, the Function can be replaced with a lambda:

MutableList<String> sortedLastNames = people.collect(person -> person.getLastName()).sortThis();

Or, a method reference:

MutableList<String> sortedLastNames = people.collect(Person::getLastName).sortThis();

Why GS Collections?

  • Improves readability and reduces duplication of iteration code (enforces DRY/OAOO)
  • Implements several, high-level iteration patterns (select, reject, collect, inject into, etc.) on "humane" container interfaces which are extensions of the JDK interfaces
  • Provides a consistent mechanism for iterating over Collections, Arrays, Maps, and Strings
  • Provides replacements for ArrayList, HashSet, and HashMap optimized for performance and memory usage
  • Performs more "behind-the-scene" optimizations in utility classes
  • Encapsulates a lot of the structural complexity of parallel iteration and lazy evaluation
  • Adds new containers including Bag, Interval, Multimap, BiMap, and immutable versions of all types
  • Has been under active development since 2005 and is a mature library

Documentation

The best way to learn about GS Collections is to dive into the code kata. The kata is a fun way to learn idiomatic GS Collections usage and hone your skills through practice. Please refer to the wiki for more details.

For more comprehensive documentation, take a look at the Reference Guide.

Contributions

We currently do all development in an internal Subversion repository and are not prepared to take external contributions. However, we watch the issue tracker for bug reports and feature requests.

FAQ

Why is Goldman Sachs open-sourcing GS Collections?

  • We believe that GS Collections offers a significant advantage over existing solutions. We hope others will benefit from it.
  • We believe in the power of the technical community to help improve GS Collections.
  • Technology is a huge part of what we do at Goldman Sachs. GS Collections exemplifies our commitment to technology.
  • We use open source software in many of our operations. We have benefited from the work of others and we'd like to give something back.

Does Goldman Sachs use GS Collections?

Yes, we use GS Collections in many of our internal applications.

Acquiring GS Collections

Download

Maven

<dependency>
  <groupId>com.goldmansachs</groupId>
  <artifactId>gs-collections-api</artifactId>
  <version>7.0.0</version>
</dependency>

<dependency>
  <groupId>com.goldmansachs</groupId>
  <artifactId>gs-collections</artifactId>
  <version>7.0.0</version>
</dependency>

<dependency>
  <groupId>com.goldmansachs</groupId>
  <artifactId>gs-collections-testutils</artifactId>
  <version>7.0.0</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>com.goldmansachs</groupId>
  <artifactId>gs-collections-forkjoin</artifactId>
  <version>7.0.0</version>
</dependency>

Gradle

compile 'com.goldmansachs:gs-collections-api:7.0.0'
compile 'com.goldmansachs:gs-collections:7.0.0'
testCompile 'com.goldmansachs:gs-collections-testutils:7.0.0'
compile 'com.goldmansachs:gs-collections-forkjoin:7.0.0'

Ivy

<dependency org="com.goldmansachs" name="gs-collections-api" rev="7.0.0" />
<dependency org="com.goldmansachs" name="gs-collections" rev="7.0.0" />
<dependency org="com.goldmansachs" name="gs-collections-testutils" rev="7.0.0" />
<dependency org="com.goldmansachs" name="gs-collections-forkjoin" rev="7.0.0"/>

gs-collections's People

Contributors

alblue avatar davidxlee avatar gs-gaysii avatar hausea avatar henohenotsuyoshi avatar itohro avatar jajodr avatar kevin-m-knight-gs avatar motlin avatar nikhilnanivadekar avatar rafaelbey avatar saravanaperumalk avatar yusukebando avatar zhonjo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gs-collections's Issues

JDK 7 build?

I have been trying to build gs-collections, but master, and tags 5.1.0 and 5.0.0 all require JDK 8. Is there a version that doesn't require JDK 8? I would like to do some testing with this for possible use.

Bug in UnifiedSet$ChainedBucket.removeLongChain() method

Hi there,

a problem with the computation of our hashkeys generated very frequent collisions, and thus bigger buckets. We then had an exception using UnifiedSet.retainAll().

I had a look at the code and found the problem: if i>3 then ChainedBucket.remove(i) calls removeLongChain(i-3), but the switch statement in removeLongChain throws an exception if i-3 > 3. Removing an object in the third chained bucket is thus not possible. It surely did not occur until now, because such heavy collisions are unlikely to happen.

Here is a "minimal change" fix:

        private void removeLongChain(ChainedBucket oldBucket, int i)
        {
            do
            {
                ChainedBucket bucket = (ChainedBucket) oldBucket.three;
                switch (i)
                {
                    case 0:
                        bucket.zero = bucket.removeLast(0);
                        return;
                    case 1:
                        bucket.one = bucket.removeLast(1);
                        return;
                    case 2:
                        bucket.two = bucket.removeLast(2);
                        return;
                    case 3:
                        if (bucket.three instanceof ChainedBucket)
                        {
                            i -= 3;
                            oldBucket = bucket;
                            continue;
                        }
                        bucket.three = null;
                        return;
                    default:
// new code starts here (similar to case 3)
                        if (bucket.three instanceof ChainedBucket)
                        {
                            i -= 3;
                            oldBucket = bucket;
                            continue;
                        }
// new code ends here
                        throw new AssertionError();
                }
            }
            while (true);
        }

Here is a small exemple that reproduces the problem (using some of the strings wth colliding hash from issue #26):

package de.derivo;

import com.gs.collections.impl.set.mutable.UnifiedSet;

import java.util.Set;

public class Main {

    static final String[] COLLISIONS = new String[] {
            "\u9103\ufffe",
            "\u9104\uffdf",
            "\u9105\uffc0",
            "\u9106\uffa1",
            "\u9107\uff82",
            "\u9108\uff63",
            "\u9109\uff44",
            "\u910a\uff25",
            "\u910b\uff06",
            "\u910c\ufee7"
    };

    final static int COUNT = 9;

    public static void main(String[] args) {
        Set<String> stringSet = new UnifiedSet<>();
        Set<String> stringSet2 = new UnifiedSet<>();

        for (int i = 0; i < COUNT; i++) {
            stringSet.add(COLLISIONS[i]);
        }
        for (int i = 0; i < COUNT-2; i++) {
            stringSet2.add(COLLISIONS[i]);
        }
        stringSet.retainAll(stringSet2);
    }
}

Thanks for the great collections, I hope this helps!

Vincent.

ArrayIndexOutOfBoundsException while iterating over UnifiedMap

I was iterating over a unifiedMap using values view and hit an ArrayIndexOutOfBoundsException

for (Object o : unifiedMap.valuesView()) 

|
|

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1048576
    at com.gs.collections.impl.map.mutable.UnifiedMap$ValuesIterator.next(UnifiedMap.java:2564)
    at com.gs.collections.impl.UnmodifiableIteratorAdapter.next(UnmodifiableIteratorAdapter.java:42)
    at com.gs.futures.lexicon.product.client.components.InstrumentCache.unionOfChildMapsAsInstrumentList(InstrumentCache.java:471)

Build test failure

I was building 4.2.0 (JDK 7 - using OpenJDK 1.7.0_55 on Fedora 20), and I get one unit test failure:

Failed tests:
ArrayListAdapterTest.serializedForm:38 Serialization was broken. expected:<...zaXpleHAAAAAAdwQAAAA[K]eA==> but was:<...zaXpleHAAAAAAdwQAAAA[A]eA==>

Tests run: 1096, Failures: 1, Errors: 0, Skipped: 0

LongArrayList.reverseThis() is broken

LongArrayList.reverseThis() operates on array size, not on actual List size. After reversing some items are lost. This was seen in 7.0.0

Reproduce:

  1. create LongArrayList with array size 10
  2. add one non zero item.
  3. perform reverseThis()
  4. List now contains zero

relax visibility of arraylist items / ability to addAll efficiently

If one wants to append a IntArrayList to another IntArrayList, there's an extra copy involved due to the call to toArray():

   public boolean addAll(IntIterable source)
    {
        return this.addAll(source.toArray());
    }

Also, please relax the visibility of items to protected, so one can subclass this collection. As I understand, that was the design rationale for FastList vs. JDK ArrayList, but looks like the same mistake is repeated here :)

FastList IndexOutOfBoundError even after calling ensureCapacity

Scenario: Call ensureCapacity on a FastList then add to the list with a particular index.

Expected: success of all adds where the index is less than the capacity. Looking at the code of ensureCapacity supports this expectation since the method actually allocates a backing array of the requested capacity.

Current behavior: IndexOutOfBound can happen when adding at arbitrary indexes.

Reason: The add method with the index specified checks the index against the size rather than the capacity.

AntiVir alert EXP/CVE-2012-0507

Hi,
my Anti-Virus AVIRA alerted me with an exploitEXP/CVE-2012-0507 while i was downloading your newest 6.0 gs-collections version from maven. I downgraded to 5.1 where this message doesn't appear. Could you please check the file, that is provided on mvn repo?

Best regards

Avoid double probe

Another performance issue, I can look into patching this on the Eclipse Collections project as well.

For, primitive object maps, "ObjectHashMap" the "getIfAbsent" method calls the probe function twice, basically doubling the cost of a hash lookup. The problem are the lines:

        int index = this.probe(key);
        if (this.keys[this.probe(key)] == key)

the precomputed index value is recomputed from scratch on the second line!

load factor support in the map

Hi,

We have been using gs-collection in our project and wanting to control the size requirement for several small maps. Apparently all the primitive maps don't support the load factor and always assumes 0.5. Could you clarify if this is something intended or can be provided?

Regards,
Sushant

IntArrayList (and friends)'s sortThis assume the collection is trimmed

    @Test
    public void testArrayListSortThis() {
        final IntArrayList list = new IntArrayList();
        list.add(6);
        list.add(5);
        list.sortThis();
        assertEquals(5, list.get(0));
    }
Expected :5
Actual   :0

The internal array in IntArrayList, after this set of operations, is:

new int[] { 0,0,0,0,0,0,0,0,5,6 }

Fix?

    public IntArrayList sortThis()
    {
        Arrays.sort(this.items, 0, this.size);
        return this;
    }

7.0.0 relese notes?

Hello,

are there any release notes for 7.0.0, please? Yes, I can go through the commits and make take notes, but somewhat defeats the purpose.

Thanks you!

Building gs-collection fails when using JDK 1.8.0-ea

As part of the Adopt OpenJDK project, we have been building Java opensource projects using the EA release of Java 8 (from http://www.oracle.com/technetwork/java/javase/downloads/ea-jsp-142245.html) and found the below response (see gist):

https://gist.github.com/neomatrix369/6017864

When the build is successful, as a bonus you can add the below image to any gs-collections assets - github readme or website:

https://java.net/downloads/adoptopenjdk/compat.svg

Have a look at a sample usage to see what I mean:
https://github.com/neomatrix369/RESTAPIUnifier/blob/master/README.md

-- Adopt OpenJDK volunteer.

Inefficient list.clear() methods

Maybe there is a reason for this that I am missing, but it seems like the 'clear()' method for the List classes are very wasteful. For FastList, the .clear() method nulls the entire inner array regardless of what the size of the list is. As a result, the clear() method takes times proportional to the space allocated, not the size of the list.

This can cause severe performance degradation for some use patterns. For example, if you add one million elements to a FastList, clear that list, then add one element to the list, then clear it again, the second call to clear() will walk through and set to null the entire 1 million length internal array even though the size of the list is actually 1. Instead the clear method should only reset size elements of the inner array, as is done by java.util.ArrayList.

This issues seems to affect primitive lists as well. For primitive ArrayLists, the clear method should just be able to set size to 0 since nothing needs to be GCed, instead the entire internal array is overwritten.

Better handle hash collisions

With large hash collisions hashed gs-collections seem to perform a lot worse than the stock HotSpot hashed collections. Initial superficial analysis seems to suggest that with large hash collisions gs-collections also scale a lot worse than the stock HotSpot collections.
Generally large hash collisions are a symptom of bad hash code implementations is user code. However sometimes an attacker can craft input that results in large hash collisions. An example is when an attacker is able to supply strings that end up as keys in hashed collections and he can chose the input such that all keys have the same hash code. This is generally the case for any key-value based input, examples include XML element or attribute names, XML namespace prefixes, names of JSON object properties, HTTP header names and query parameters of any kind. If an attacker is able to create large enough hash collisions he may be able to degrade application performance enough to create a DoS attack.

String#hashCode() is quite susceptible to hash collisions. There are 2048 strings of length 2 that have the same hash code (see below). Strings have the property that if a.hashCode() == b.hashCode() then (a + b).hashCode() == (b + a).hashCode(). This means out of these 2048 strings one can generate 4194304 strings of length 4 with the same hash code.

To mitigate this changes where introduced to HashMap (the implementation of String#hashCode() is specified in the Javadoc and Oracle does not want to change it). As a stop gap measure HashMap used MurmurHash 3 with a random seed to hash strings by calling sun.misc.Hashing.stringHash32 instead of calling String#hashCode() with an instanceof check in HashMap.hash(Object). This changce seems to have been rolled back in recent Java 8 versions. The second change was to overflow to a red-black tree instead of a (linked) list when there are too many hash collisions for a slot. This would probably be the most appropriate change for gs-collections as well.

This is all based on Schadcode - Schadenfreude for Hash Functions.

Sample code for producing collisions an be found in marschall/hashcollisions.

The following are results for JMH benchmarks with 2048 elements all having the same hash code.
As you can see sometimes gs-collections is about factor 50 slower than the stock HotSpot collections.
However if it's a scalability difference then more elements would produce a larger difference.

Jcf = Java Colllections Framework (stock HotSpot collections) JDK 1.8u60

Benchmark                                     Mode  Cnt       Score     Error   Units
AddCollisionBenchmark.addAllGs               thrpt  100     119.261 ยฑ   0.419   ops/s
AddCollisionBenchmark.addAllJcf              thrpt  100    2767.947 ยฑ  20.575   ops/s
AddCollisionBenchmark.addGs                  thrpt  100      72.486 ยฑ   0.356   ops/s
AddCollisionBenchmark.addJcf                 thrpt  100    2799.135 ยฑ  24.741   ops/s
ContainsCollisionBenchmark.containsFirstGs   thrpt  100  161330.010 ยฑ 474.255  ops/ms
ContainsCollisionBenchmark.containsFirstJcf  thrpt  100   13325.214 ยฑ  47.434  ops/ms
ContainsCollisionBenchmark.containsLastGs    thrpt  100     139.416 ยฑ   0.540  ops/ms
ContainsCollisionBenchmark.containsLastJcf   thrpt  100    5854.555 ยฑ  23.810  ops/ms

The following strings all have the same hash code (1216347)

  static final String[] COLLISIONS = new String[] {
      "\u9103\ufffe",
      "\u9104\uffdf",
      "\u9105\uffc0",
      "\u9106\uffa1",
      "\u9107\uff82",
      "\u9108\uff63",
      "\u9109\uff44",
      "\u910a\uff25",
      "\u910b\uff06",
      "\u910c\ufee7",
      "\u910d\ufec8",
      "\u910e\ufea9",
      "\u910f\ufe8a",
      "\u9110\ufe6b",
      "\u9111\ufe4c",
      "\u9112\ufe2d",
      "\u9113\ufe0e",
      "\u9114\ufdef",
      "\u9115\ufdd0",
      "\u9116\ufdb1",
      "\u9117\ufd92",
      "\u9118\ufd73",
      "\u9119\ufd54",
      "\u911a\ufd35",
      "\u911b\ufd16",
      "\u911c\ufcf7",
      "\u911d\ufcd8",
      "\u911e\ufcb9",
      "\u911f\ufc9a",
      "\u9120\ufc7b",
      "\u9121\ufc5c",
      "\u9122\ufc3d",
      "\u9123\ufc1e",
      "\u9124\ufbff",
      "\u9125\ufbe0",
      "\u9126\ufbc1",
      "\u9127\ufba2",
      "\u9128\ufb83",
      "\u9129\ufb64",
      "\u912a\ufb45",
      "\u912b\ufb26",
      "\u912c\ufb07",
      "\u912d\ufae8",
      "\u912e\ufac9",
      "\u912f\ufaaa",
      "\u9130\ufa8b",
      "\u9131\ufa6c",
      "\u9132\ufa4d",
      "\u9133\ufa2e",
      "\u9134\ufa0f",
      "\u9135\uf9f0",
      "\u9136\uf9d1",
      "\u9137\uf9b2",
      "\u9138\uf993",
      "\u9139\uf974",
      "\u913a\uf955",
      "\u913b\uf936",
      "\u913c\uf917",
      "\u913d\uf8f8",
      "\u913e\uf8d9",
      "\u913f\uf8ba",
      "\u9140\uf89b",
      "\u9141\uf87c",
      "\u9142\uf85d",
      "\u9143\uf83e",
      "\u9144\uf81f",
      "\u9145\uf800",
      "\u9146\uf7e1",
      "\u9147\uf7c2",
      "\u9148\uf7a3",
      "\u9149\uf784",
      "\u914a\uf765",
      "\u914b\uf746",
      "\u914c\uf727",
      "\u914d\uf708",
      "\u914e\uf6e9",
      "\u914f\uf6ca",
      "\u9150\uf6ab",
      "\u9151\uf68c",
      "\u9152\uf66d",
      "\u9153\uf64e",
      "\u9154\uf62f",
      "\u9155\uf610",
      "\u9156\uf5f1",
      "\u9157\uf5d2",
      "\u9158\uf5b3",
      "\u9159\uf594",
      "\u915a\uf575",
      "\u915b\uf556",
      "\u915c\uf537",
      "\u915d\uf518",
      "\u915e\uf4f9",
      "\u915f\uf4da",
      "\u9160\uf4bb",
      "\u9161\uf49c",
      "\u9162\uf47d",
      "\u9163\uf45e",
      "\u9164\uf43f",
      "\u9165\uf420",
      "\u9166\uf401",
      "\u9167\uf3e2",
      "\u9168\uf3c3",
      "\u9169\uf3a4",
      "\u916a\uf385",
      "\u916b\uf366",
      "\u916c\uf347",
      "\u916d\uf328",
      "\u916e\uf309",
      "\u916f\uf2ea",
      "\u9170\uf2cb",
      "\u9171\uf2ac",
      "\u9172\uf28d",
      "\u9173\uf26e",
      "\u9174\uf24f",
      "\u9175\uf230",
      "\u9176\uf211",
      "\u9177\uf1f2",
      "\u9178\uf1d3",
      "\u9179\uf1b4",
      "\u917a\uf195",
      "\u917b\uf176",
      "\u917c\uf157",
      "\u917d\uf138",
      "\u917e\uf119",
      "\u917f\uf0fa",
      "\u9180\uf0db",
      "\u9181\uf0bc",
      "\u9182\uf09d",
      "\u9183\uf07e",
      "\u9184\uf05f",
      "\u9185\uf040",
      "\u9186\uf021",
      "\u9187\uf002",
      "\u9188\uefe3",
      "\u9189\uefc4",
      "\u918a\uefa5",
      "\u918b\uef86",
      "\u918c\uef67",
      "\u918d\uef48",
      "\u918e\uef29",
      "\u918f\uef0a",
      "\u9190\ueeeb",
      "\u9191\ueecc",
      "\u9192\ueead",
      "\u9193\uee8e",
      "\u9194\uee6f",
      "\u9195\uee50",
      "\u9196\uee31",
      "\u9197\uee12",
      "\u9198\uedf3",
      "\u9199\uedd4",
      "\u919a\uedb5",
      "\u919b\ued96",
      "\u919c\ued77",
      "\u919d\ued58",
      "\u919e\ued39",
      "\u919f\ued1a",
      "\u91a0\uecfb",
      "\u91a1\uecdc",
      "\u91a2\uecbd",
      "\u91a3\uec9e",
      "\u91a4\uec7f",
      "\u91a5\uec60",
      "\u91a6\uec41",
      "\u91a7\uec22",
      "\u91a8\uec03",
      "\u91a9\uebe4",
      "\u91aa\uebc5",
      "\u91ab\ueba6",
      "\u91ac\ueb87",
      "\u91ad\ueb68",
      "\u91ae\ueb49",
      "\u91af\ueb2a",
      "\u91b0\ueb0b",
      "\u91b1\ueaec",
      "\u91b2\ueacd",
      "\u91b3\ueaae",
      "\u91b4\uea8f",
      "\u91b5\uea70",
      "\u91b6\uea51",
      "\u91b7\uea32",
      "\u91b8\uea13",
      "\u91b9\ue9f4",
      "\u91ba\ue9d5",
      "\u91bb\ue9b6",
      "\u91bc\ue997",
      "\u91bd\ue978",
      "\u91be\ue959",
      "\u91bf\ue93a",
      "\u91c0\ue91b",
      "\u91c1\ue8fc",
      "\u91c2\ue8dd",
      "\u91c3\ue8be",
      "\u91c4\ue89f",
      "\u91c5\ue880",
      "\u91c6\ue861",
      "\u91c7\ue842",
      "\u91c8\ue823",
      "\u91c9\ue804",
      "\u91ca\ue7e5",
      "\u91cb\ue7c6",
      "\u91cc\ue7a7",
      "\u91cd\ue788",
      "\u91ce\ue769",
      "\u91cf\ue74a",
      "\u91d0\ue72b",
      "\u91d1\ue70c",
      "\u91d2\ue6ed",
      "\u91d3\ue6ce",
      "\u91d4\ue6af",
      "\u91d5\ue690",
      "\u91d6\ue671",
      "\u91d7\ue652",
      "\u91d8\ue633",
      "\u91d9\ue614",
      "\u91da\ue5f5",
      "\u91db\ue5d6",
      "\u91dc\ue5b7",
      "\u91dd\ue598",
      "\u91de\ue579",
      "\u91df\ue55a",
      "\u91e0\ue53b",
      "\u91e1\ue51c",
      "\u91e2\ue4fd",
      "\u91e3\ue4de",
      "\u91e4\ue4bf",
      "\u91e5\ue4a0",
      "\u91e6\ue481",
      "\u91e7\ue462",
      "\u91e8\ue443",
      "\u91e9\ue424",
      "\u91ea\ue405",
      "\u91eb\ue3e6",
      "\u91ec\ue3c7",
      "\u91ed\ue3a8",
      "\u91ee\ue389",
      "\u91ef\ue36a",
      "\u91f0\ue34b",
      "\u91f1\ue32c",
      "\u91f2\ue30d",
      "\u91f3\ue2ee",
      "\u91f4\ue2cf",
      "\u91f5\ue2b0",
      "\u91f6\ue291",
      "\u91f7\ue272",
      "\u91f8\ue253",
      "\u91f9\ue234",
      "\u91fa\ue215",
      "\u91fb\ue1f6",
      "\u91fc\ue1d7",
      "\u91fd\ue1b8",
      "\u91fe\ue199",
      "\u91ff\ue17a",
      "\u9200\ue15b",
      "\u9201\ue13c",
      "\u9202\ue11d",
      "\u9203\ue0fe",
      "\u9204\ue0df",
      "\u9205\ue0c0",
      "\u9206\ue0a1",
      "\u9207\ue082",
      "\u9208\ue063",
      "\u9209\ue044",
      "\u920a\ue025",
      "\u920b\ue006",
      "\u924e\ud7e9",
      "\u924f\ud7ca",
      "\u9250\ud7ab",
      "\u9251\ud78c",
      "\u9252\ud76d",
      "\u9253\ud74e",
      "\u9254\ud72f",
      "\u9255\ud710",
      "\u9256\ud6f1",
      "\u9257\ud6d2",
      "\u9258\ud6b3",
      "\u9259\ud694",
      "\u925a\ud675",
      "\u925b\ud656",
      "\u925c\ud637",
      "\u925d\ud618",
      "\u925e\ud5f9",
      "\u925f\ud5da",
      "\u9260\ud5bb",
      "\u9261\ud59c",
      "\u9262\ud57d",
      "\u9263\ud55e",
      "\u9264\ud53f",
      "\u9265\ud520",
      "\u9266\ud501",
      "\u9267\ud4e2",
      "\u9268\ud4c3",
      "\u9269\ud4a4",
      "\u926a\ud485",
      "\u926b\ud466",
      "\u926c\ud447",
      "\u926d\ud428",
      "\u926e\ud409",
      "\u926f\ud3ea",
      "\u9270\ud3cb",
      "\u9271\ud3ac",
      "\u9272\ud38d",
      "\u9273\ud36e",
      "\u9274\ud34f",
      "\u9275\ud330",
      "\u9276\ud311",
      "\u9277\ud2f2",
      "\u9278\ud2d3",
      "\u9279\ud2b4",
      "\u927a\ud295",
      "\u927b\ud276",
      "\u927c\ud257",
      "\u927d\ud238",
      "\u927e\ud219",
      "\u927f\ud1fa",
      "\u9280\ud1db",
      "\u9281\ud1bc",
      "\u9282\ud19d",
      "\u9283\ud17e",
      "\u9284\ud15f",
      "\u9285\ud140",
      "\u9286\ud121",
      "\u9287\ud102",
      "\u9288\ud0e3",
      "\u9289\ud0c4",
      "\u928a\ud0a5",
      "\u928b\ud086",
      "\u928c\ud067",
      "\u928d\ud048",
      "\u928e\ud029",
      "\u928f\ud00a",
      "\u9290\ucfeb",
      "\u9291\ucfcc",
      "\u9292\ucfad",
      "\u9293\ucf8e",
      "\u9294\ucf6f",
      "\u9295\ucf50",
      "\u9296\ucf31",
      "\u9297\ucf12",
      "\u9298\ucef3",
      "\u9299\uced4",
      "\u929a\uceb5",
      "\u929b\uce96",
      "\u929c\uce77",
      "\u929d\uce58",
      "\u929e\uce39",
      "\u929f\uce1a",
      "\u92a0\ucdfb",
      "\u92a1\ucddc",
      "\u92a2\ucdbd",
      "\u92a3\ucd9e",
      "\u92a4\ucd7f",
      "\u92a5\ucd60",
      "\u92a6\ucd41",
      "\u92a7\ucd22",
      "\u92a8\ucd03",
      "\u92a9\ucce4",
      "\u92aa\uccc5",
      "\u92ab\ucca6",
      "\u92ac\ucc87",
      "\u92ad\ucc68",
      "\u92ae\ucc49",
      "\u92af\ucc2a",
      "\u92b0\ucc0b",
      "\u92b1\ucbec",
      "\u92b2\ucbcd",
      "\u92b3\ucbae",
      "\u92b4\ucb8f",
      "\u92b5\ucb70",
      "\u92b6\ucb51",
      "\u92b7\ucb32",
      "\u92b8\ucb13",
      "\u92b9\ucaf4",
      "\u92ba\ucad5",
      "\u92bb\ucab6",
      "\u92bc\uca97",
      "\u92bd\uca78",
      "\u92be\uca59",
      "\u92bf\uca3a",
      "\u92c0\uca1b",
      "\u92c1\uc9fc",
      "\u92c2\uc9dd",
      "\u92c3\uc9be",
      "\u92c4\uc99f",
      "\u92c5\uc980",
      "\u92c6\uc961",
      "\u92c7\uc942",
      "\u92c8\uc923",
      "\u92c9\uc904",
      "\u92ca\uc8e5",
      "\u92cb\uc8c6",
      "\u92cc\uc8a7",
      "\u92cd\uc888",
      "\u92ce\uc869",
      "\u92cf\uc84a",
      "\u92d0\uc82b",
      "\u92d1\uc80c",
      "\u92d2\uc7ed",
      "\u92d3\uc7ce",
      "\u92d4\uc7af",
      "\u92d5\uc790",
      "\u92d6\uc771",
      "\u92d7\uc752",
      "\u92d8\uc733",
      "\u92d9\uc714",
      "\u92da\uc6f5",
      "\u92db\uc6d6",
      "\u92dc\uc6b7",
      "\u92dd\uc698",
      "\u92de\uc679",
      "\u92df\uc65a",
      "\u92e0\uc63b",
      "\u92e1\uc61c",
      "\u92e2\uc5fd",
      "\u92e3\uc5de",
      "\u92e4\uc5bf",
      "\u92e5\uc5a0",
      "\u92e6\uc581",
      "\u92e7\uc562",
      "\u92e8\uc543",
      "\u92e9\uc524",
      "\u92ea\uc505",
      "\u92eb\uc4e6",
      "\u92ec\uc4c7",
      "\u92ed\uc4a8",
      "\u92ee\uc489",
      "\u92ef\uc46a",
      "\u92f0\uc44b",
      "\u92f1\uc42c",
      "\u92f2\uc40d",
      "\u92f3\uc3ee",
      "\u92f4\uc3cf",
      "\u92f5\uc3b0",
      "\u92f6\uc391",
      "\u92f7\uc372",
      "\u92f8\uc353",
      "\u92f9\uc334",
      "\u92fa\uc315",
      "\u92fb\uc2f6",
      "\u92fc\uc2d7",
      "\u92fd\uc2b8",
      "\u92fe\uc299",
      "\u92ff\uc27a",
      "\u9300\uc25b",
      "\u9301\uc23c",
      "\u9302\uc21d",
      "\u9303\uc1fe",
      "\u9304\uc1df",
      "\u9305\uc1c0",
      "\u9306\uc1a1",
      "\u9307\uc182",
      "\u9308\uc163",
      "\u9309\uc144",
      "\u930a\uc125",
      "\u930b\uc106",
      "\u930c\uc0e7",
      "\u930d\uc0c8",
      "\u930e\uc0a9",
      "\u930f\uc08a",
      "\u9310\uc06b",
      "\u9311\uc04c",
      "\u9312\uc02d",
      "\u9313\uc00e",
      "\u9314\ubfef",
      "\u9315\ubfd0",
      "\u9316\ubfb1",
      "\u9317\ubf92",
      "\u9318\ubf73",
      "\u9319\ubf54",
      "\u931a\ubf35",
      "\u931b\ubf16",
      "\u931c\ubef7",
      "\u931d\ubed8",
      "\u931e\ubeb9",
      "\u931f\ube9a",
      "\u9320\ube7b",
      "\u9321\ube5c",
      "\u9322\ube3d",
      "\u9323\ube1e",
      "\u9324\ubdff",
      "\u9325\ubde0",
      "\u9326\ubdc1",
      "\u9327\ubda2",
      "\u9328\ubd83",
      "\u9329\ubd64",
      "\u932a\ubd45",
      "\u932b\ubd26",
      "\u932c\ubd07",
      "\u932d\ubce8",
      "\u932e\ubcc9",
      "\u932f\ubcaa",
      "\u9330\ubc8b",
      "\u9331\ubc6c",
      "\u9332\ubc4d",
      "\u9333\ubc2e",
      "\u9334\ubc0f",
      "\u9335\ubbf0",
      "\u9336\ubbd1",
      "\u9337\ubbb2",
      "\u9338\ubb93",
      "\u9339\ubb74",
      "\u933a\ubb55",
      "\u933b\ubb36",
      "\u933c\ubb17",
      "\u933d\ubaf8",
      "\u933e\ubad9",
      "\u933f\ubaba",
      "\u9340\uba9b",
      "\u9341\uba7c",
      "\u9342\uba5d",
      "\u9343\uba3e",
      "\u9344\uba1f",
      "\u9345\uba00",
      "\u9346\ub9e1",
      "\u9347\ub9c2",
      "\u9348\ub9a3",
      "\u9349\ub984",
      "\u934a\ub965",
      "\u934b\ub946",
      "\u934c\ub927",
      "\u934d\ub908",
      "\u934e\ub8e9",
      "\u934f\ub8ca",
      "\u9350\ub8ab",
      "\u9351\ub88c",
      "\u9352\ub86d",
      "\u9353\ub84e",
      "\u9354\ub82f",
      "\u9355\ub810",
      "\u9356\ub7f1",
      "\u9357\ub7d2",
      "\u9358\ub7b3",
      "\u9359\ub794",
      "\u935a\ub775",
      "\u935b\ub756",
      "\u935c\ub737",
      "\u935d\ub718",
      "\u935e\ub6f9",
      "\u935f\ub6da",
      "\u9360\ub6bb",
      "\u9361\ub69c",
      "\u9362\ub67d",
      "\u9363\ub65e",
      "\u9364\ub63f",
      "\u9365\ub620",
      "\u9366\ub601",
      "\u9367\ub5e2",
      "\u9368\ub5c3",
      "\u9369\ub5a4",
      "\u936a\ub585",
      "\u936b\ub566",
      "\u936c\ub547",
      "\u936d\ub528",
      "\u936e\ub509",
      "\u936f\ub4ea",
      "\u9370\ub4cb",
      "\u9371\ub4ac",
      "\u9372\ub48d",
      "\u9373\ub46e",
      "\u9374\ub44f",
      "\u9375\ub430",
      "\u9376\ub411",
      "\u9377\ub3f2",
      "\u9378\ub3d3",
      "\u9379\ub3b4",
      "\u937a\ub395",
      "\u937b\ub376",
      "\u937c\ub357",
      "\u937d\ub338",
      "\u937e\ub319",
      "\u937f\ub2fa",
      "\u9380\ub2db",
      "\u9381\ub2bc",
      "\u9382\ub29d",
      "\u9383\ub27e",
      "\u9384\ub25f",
      "\u9385\ub240",
      "\u9386\ub221",
      "\u9387\ub202",
      "\u9388\ub1e3",
      "\u9389\ub1c4",
      "\u938a\ub1a5",
      "\u938b\ub186",
      "\u938c\ub167",
      "\u938d\ub148",
      "\u938e\ub129",
      "\u938f\ub10a",
      "\u9390\ub0eb",
      "\u9391\ub0cc",
      "\u9392\ub0ad",
      "\u9393\ub08e",
      "\u9394\ub06f",
      "\u9395\ub050",
      "\u9396\ub031",
      "\u9397\ub012",
      "\u9398\uaff3",
      "\u9399\uafd4",
      "\u939a\uafb5",
      "\u939b\uaf96",
      "\u939c\uaf77",
      "\u939d\uaf58",
      "\u939e\uaf39",
      "\u939f\uaf1a",
      "\u93a0\uaefb",
      "\u93a1\uaedc",
      "\u93a2\uaebd",
      "\u93a3\uae9e",
      "\u93a4\uae7f",
      "\u93a5\uae60",
      "\u93a6\uae41",
      "\u93a7\uae22",
      "\u93a8\uae03",
      "\u93a9\uade4",
      "\u93aa\uadc5",
      "\u93ab\uada6",
      "\u93ac\uad87",
      "\u93ad\uad68",
      "\u93ae\uad49",
      "\u93af\uad2a",
      "\u93b0\uad0b",
      "\u93b1\uacec",
      "\u93b2\uaccd",
      "\u93b3\uacae",
      "\u93b4\uac8f",
      "\u93b5\uac70",
      "\u93b6\uac51",
      "\u93b7\uac32",
      "\u93b8\uac13",
      "\u93b9\uabf4",
      "\u93ba\uabd5",
      "\u93bb\uabb6",
      "\u93bc\uab97",
      "\u93bd\uab78",
      "\u93be\uab59",
      "\u93bf\uab3a",
      "\u93c0\uab1b",
      "\u93c1\uaafc",
      "\u93c2\uaadd",
      "\u93c3\uaabe",
      "\u93c4\uaa9f",
      "\u93c5\uaa80",
      "\u93c6\uaa61",
      "\u93c7\uaa42",
      "\u93c8\uaa23",
      "\u93c9\uaa04",
      "\u93ca\ua9e5",
      "\u93cb\ua9c6",
      "\u93cc\ua9a7",
      "\u93cd\ua988",
      "\u93ce\ua969",
      "\u93cf\ua94a",
      "\u93d0\ua92b",
      "\u93d1\ua90c",
      "\u93d2\ua8ed",
      "\u93d3\ua8ce",
      "\u93d4\ua8af",
      "\u93d5\ua890",
      "\u93d6\ua871",
      "\u93d7\ua852",
      "\u93d8\ua833",
      "\u93d9\ua814",
      "\u93da\ua7f5",
      "\u93db\ua7d6",
      "\u93dc\ua7b7",
      "\u93dd\ua798",
      "\u93de\ua779",
      "\u93df\ua75a",
      "\u93e0\ua73b",
      "\u93e1\ua71c",
      "\u93e2\ua6fd",
      "\u93e3\ua6de",
      "\u93e4\ua6bf",
      "\u93e5\ua6a0",
      "\u93e6\ua681",
      "\u93e7\ua662",
      "\u93e8\ua643",
      "\u93e9\ua624",
      "\u93ea\ua605",
      "\u93eb\ua5e6",
      "\u93ec\ua5c7",
      "\u93ed\ua5a8",
      "\u93ee\ua589",
      "\u93ef\ua56a",
      "\u93f0\ua54b",
      "\u93f1\ua52c",
      "\u93f2\ua50d",
      "\u93f3\ua4ee",
      "\u93f4\ua4cf",
      "\u93f5\ua4b0",
      "\u93f6\ua491",
      "\u93f7\ua472",
      "\u93f8\ua453",
      "\u93f9\ua434",
      "\u93fa\ua415",
      "\u93fb\ua3f6",
      "\u93fc\ua3d7",
      "\u93fd\ua3b8",
      "\u93fe\ua399",
      "\u93ff\ua37a",
      "\u9400\ua35b",
      "\u9401\ua33c",
      "\u9402\ua31d",
      "\u9403\ua2fe",
      "\u9404\ua2df",
      "\u9405\ua2c0",
      "\u9406\ua2a1",
      "\u9407\ua282",
      "\u9408\ua263",
      "\u9409\ua244",
      "\u940a\ua225",
      "\u940b\ua206",
      "\u940c\ua1e7",
      "\u940d\ua1c8",
      "\u940e\ua1a9",
      "\u940f\ua18a",
      "\u9410\ua16b",
      "\u9411\ua14c",
      "\u9412\ua12d",
      "\u9413\ua10e",
      "\u9414\ua0ef",
      "\u9415\ua0d0",
      "\u9416\ua0b1",
      "\u9417\ua092",
      "\u9418\ua073",
      "\u9419\ua054",
      "\u941a\ua035",
      "\u941b\ua016",
      "\u941c\u9ff7",
      "\u941d\u9fd8",
      "\u941e\u9fb9",
      "\u941f\u9f9a",
      "\u9420\u9f7b",
      "\u9421\u9f5c",
      "\u9422\u9f3d",
      "\u9423\u9f1e",
      "\u9424\u9eff",
      "\u9425\u9ee0",
      "\u9426\u9ec1",
      "\u9427\u9ea2",
      "\u9428\u9e83",
      "\u9429\u9e64",
      "\u942a\u9e45",
      "\u942b\u9e26",
      "\u942c\u9e07",
      "\u942d\u9de8",
      "\u942e\u9dc9",
      "\u942f\u9daa",
      "\u9430\u9d8b",
      "\u9431\u9d6c",
      "\u9432\u9d4d",
      "\u9433\u9d2e",
      "\u9434\u9d0f",
      "\u9435\u9cf0",
      "\u9436\u9cd1",
      "\u9437\u9cb2",
      "\u9438\u9c93",
      "\u9439\u9c74",
      "\u943a\u9c55",
      "\u943b\u9c36",
      "\u943c\u9c17",
      "\u943d\u9bf8",
      "\u943e\u9bd9",
      "\u943f\u9bba",
      "\u9440\u9b9b",
      "\u9441\u9b7c",
      "\u9442\u9b5d",
      "\u9443\u9b3e",
      "\u9444\u9b1f",
      "\u9445\u9b00",
      "\u9446\u9ae1",
      "\u9447\u9ac2",
      "\u9448\u9aa3",
      "\u9449\u9a84",
      "\u944a\u9a65",
      "\u944b\u9a46",
      "\u944c\u9a27",
      "\u944d\u9a08",
      "\u944e\u99e9",
      "\u944f\u99ca",
      "\u9450\u99ab",
      "\u9451\u998c",
      "\u9452\u996d",
      "\u9453\u994e",
      "\u9454\u992f",
      "\u9455\u9910",
      "\u9456\u98f1",
      "\u9457\u98d2",
      "\u9458\u98b3",
      "\u9459\u9894",
      "\u945a\u9875",
      "\u945b\u9856",
      "\u945c\u9837",
      "\u945d\u9818",
      "\u945e\u97f9",
      "\u945f\u97da",
      "\u9460\u97bb",
      "\u9461\u979c",
      "\u9462\u977d",
      "\u9463\u975e",
      "\u9464\u973f",
      "\u9465\u9720",
      "\u9466\u9701",
      "\u9467\u96e2",
      "\u9468\u96c3",
      "\u9469\u96a4",
      "\u946a\u9685",
      "\u946b\u9666",
      "\u946c\u9647",
      "\u946d\u9628",
      "\u946e\u9609",
      "\u946f\u95ea",
      "\u9470\u95cb",
      "\u9471\u95ac",
      "\u9472\u958d",
      "\u9473\u956e",
      "\u9474\u954f",
      "\u9475\u9530",
      "\u9476\u9511",
      "\u9477\u94f2",
      "\u9478\u94d3",
      "\u9479\u94b4",
      "\u947a\u9495",
      "\u947b\u9476",
      "\u947c\u9457",
      "\u947d\u9438",
      "\u947e\u9419",
      "\u947f\u93fa",
      "\u9480\u93db",
      "\u9481\u93bc",
      "\u9482\u939d",
      "\u9483\u937e",
      "\u9484\u935f",
      "\u9485\u9340",
      "\u9486\u9321",
      "\u9487\u9302",
      "\u9488\u92e3",
      "\u9489\u92c4",
      "\u948a\u92a5",
      "\u948b\u9286",
      "\u948c\u9267",
      "\u948d\u9248",
      "\u948e\u9229",
      "\u948f\u920a",
      "\u9490\u91eb",
      "\u9491\u91cc",
      "\u9492\u91ad",
      "\u9493\u918e",
      "\u9494\u916f",
      "\u9495\u9150",
      "\u9496\u9131",
      "\u9497\u9112",
      "\u9498\u90f3",
      "\u9499\u90d4",
      "\u949a\u90b5",
      "\u949b\u9096",
      "\u949c\u9077",
      "\u949d\u9058",
      "\u949e\u9039",
      "\u949f\u901a",
      "\u94a0\u8ffb",
      "\u94a1\u8fdc",
      "\u94a2\u8fbd",
      "\u94a3\u8f9e",
      "\u94a4\u8f7f",
      "\u94a5\u8f60",
      "\u94a6\u8f41",
      "\u94a7\u8f22",
      "\u94a8\u8f03",
      "\u94a9\u8ee4",
      "\u94aa\u8ec5",
      "\u94ab\u8ea6",
      "\u94ac\u8e87",
      "\u94ad\u8e68",
      "\u94ae\u8e49",
      "\u94af\u8e2a",
      "\u94b0\u8e0b",
      "\u94b1\u8dec",
      "\u94b2\u8dcd",
      "\u94b3\u8dae",
      "\u94b4\u8d8f",
      "\u94b5\u8d70",
      "\u94b6\u8d51",
      "\u94b7\u8d32",
      "\u94b8\u8d13",
      "\u94b9\u8cf4",
      "\u94ba\u8cd5",
      "\u94bb\u8cb6",
      "\u94bc\u8c97",
      "\u94bd\u8c78",
      "\u94be\u8c59",
      "\u94bf\u8c3a",
      "\u94c0\u8c1b",
      "\u94c1\u8bfc",
      "\u94c2\u8bdd",
      "\u94c3\u8bbe",
      "\u94c4\u8b9f",
      "\u94c5\u8b80",
      "\u94c6\u8b61",
      "\u94c7\u8b42",
      "\u94c8\u8b23",
      "\u94c9\u8b04",
      "\u94ca\u8ae5",
      "\u94cb\u8ac6",
      "\u94cc\u8aa7",
      "\u94cd\u8a88",
      "\u94ce\u8a69",
      "\u94cf\u8a4a",
      "\u94d0\u8a2b",
      "\u94d1\u8a0c",
      "\u94d2\u89ed",
      "\u94d3\u89ce",
      "\u94d4\u89af",
      "\u94d5\u8990",
      "\u94d6\u8971",
      "\u94d7\u8952",
      "\u94d8\u8933",
      "\u94d9\u8914",
      "\u94da\u88f5",
      "\u94db\u88d6",
      "\u94dc\u88b7",
      "\u94dd\u8898",
      "\u94de\u8879",
      "\u94df\u885a",
      "\u94e0\u883b",
      "\u94e1\u881c",
      "\u94e2\u87fd",
      "\u94e3\u87de",
      "\u94e4\u87bf",
      "\u94e5\u87a0",
      "\u94e6\u8781",
      "\u94e7\u8762",
      "\u94e8\u8743",
      "\u94e9\u8724",
      "\u94ea\u8705",
      "\u94eb\u86e6",
      "\u94ec\u86c7",
      "\u94ed\u86a8",
      "\u94ee\u8689",
      "\u94ef\u866a",
      "\u94f0\u864b",
      "\u94f1\u862c",
      "\u94f2\u860d",
      "\u94f3\u85ee",
      "\u94f4\u85cf",
      "\u94f5\u85b0",
      "\u94f6\u8591",
      "\u94f7\u8572",
      "\u94f8\u8553",
      "\u94f9\u8534",
      "\u94fa\u8515",
      "\u94fb\u84f6",
      "\u94fc\u84d7",
      "\u94fd\u84b8",
      "\u94fe\u8499",
      "\u94ff\u847a",
      "\u9500\u845b",
      "\u9501\u843c",
      "\u9502\u841d",
      "\u9503\u83fe",
      "\u9504\u83df",
      "\u9505\u83c0",
      "\u9506\u83a1",
      "\u9507\u8382",
      "\u9508\u8363",
      "\u9509\u8344",
      "\u950a\u8325",
      "\u950b\u8306",
      "\u950c\u82e7",
      "\u950d\u82c8",
      "\u950e\u82a9",
      "\u950f\u828a",
      "\u9510\u826b",
      "\u9511\u824c",
      "\u9512\u822d",
      "\u9513\u820e",
      "\u9514\u81ef",
      "\u9515\u81d0",
      "\u9516\u81b1",
      "\u9517\u8192",
      "\u9518\u8173",
      "\u9519\u8154",
      "\u951a\u8135",
      "\u951b\u8116",
      "\u951c\u80f7",
      "\u951d\u80d8",
      "\u951e\u80b9",
      "\u951f\u809a",
      "\u9520\u807b",
      "\u9521\u805c",
      "\u9522\u803d",
      "\u9523\u801e",
      "\u9524\u7fff",
      "\u9525\u7fe0",
      "\u9526\u7fc1",
      "\u9527\u7fa2",
      "\u9528\u7f83",
      "\u9529\u7f64",
      "\u952a\u7f45",
      "\u952b\u7f26",
      "\u952c\u7f07",
      "\u952d\u7ee8",
      "\u952e\u7ec9",
      "\u952f\u7eaa",
      "\u9530\u7e8b",
      "\u9531\u7e6c",
      "\u9532\u7e4d",
      "\u9533\u7e2e",
      "\u9534\u7e0f",
      "\u9535\u7df0",
      "\u9536\u7dd1",
      "\u9537\u7db2",
      "\u9538\u7d93",
      "\u9539\u7d74",
      "\u953a\u7d55",
      "\u953b\u7d36",
      "\u953c\u7d17",
      "\u953d\u7cf8",
      "\u953e\u7cd9",
      "\u953f\u7cba",
      "\u9540\u7c9b",
      "\u9541\u7c7c",
      "\u9542\u7c5d",
      "\u9543\u7c3e",
      "\u9544\u7c1f",
      "\u9545\u7c00",
      "\u9546\u7be1",
      "\u9547\u7bc2",
      "\u9548\u7ba3",
      "\u9549\u7b84",
      "\u954a\u7b65",
      "\u954b\u7b46",
      "\u954c\u7b27",
      "\u954d\u7b08",
      "\u954e\u7ae9",
      "\u954f\u7aca",
      "\u9550\u7aab",
      "\u9551\u7a8c",
      "\u9552\u7a6d",
      "\u9553\u7a4e",
      "\u9554\u7a2f",
      "\u9555\u7a10",
      "\u9556\u79f1",
      "\u9557\u79d2",
      "\u9558\u79b3",
      "\u9559\u7994",
      "\u955a\u7975",
      "\u955b\u7956",
      "\u955c\u7937",
      "\u955d\u7918",
      "\u955e\u78f9",
      "\u955f\u78da",
      "\u9560\u78bb",
      "\u9561\u789c",
      "\u9562\u787d",
      "\u9563\u785e",
      "\u9564\u783f",
      "\u9565\u7820",
      "\u9566\u7801",
      "\u9567\u77e2",
      "\u9568\u77c3",
      "\u9569\u77a4",
      "\u956a\u7785",
      "\u956b\u7766",
      "\u956c\u7747",
      "\u956d\u7728",
      "\u956e\u7709",
      "\u956f\u76ea",
      "\u9570\u76cb",
      "\u9571\u76ac",
      "\u9572\u768d",
      "\u9573\u766e",
      "\u9574\u764f",
      "\u9575\u7630",
      "\u9576\u7611",
      "\u9577\u75f2",
      "\u9578\u75d3",
      "\u9579\u75b4",
      "\u957a\u7595",
      "\u957b\u7576",
      "\u957c\u7557",
      "\u957d\u7538",
      "\u957e\u7519",
      "\u957f\u74fa",
      "\u9580\u74db",
      "\u9581\u74bc",
      "\u9582\u749d",
      "\u9583\u747e",
      "\u9584\u745f",
      "\u9585\u7440",
      "\u9586\u7421",
      "\u9587\u7402",
      "\u9588\u73e3",
      "\u9589\u73c4",
      "\u958a\u73a5",
      "\u958b\u7386",
      "\u958c\u7367",
      "\u958d\u7348",
      "\u958e\u7329",
      "\u958f\u730a",
      "\u9590\u72eb",
      "\u9591\u72cc",
      "\u9592\u72ad",
      "\u9593\u728e",
      "\u9594\u726f",
      "\u9595\u7250",
      "\u9596\u7231",
      "\u9597\u7212",
      "\u9598\u71f3",
      "\u9599\u71d4",
      "\u959a\u71b5",
      "\u959b\u7196",
      "\u959c\u7177",
      "\u959d\u7158",
      "\u959e\u7139",
      "\u959f\u711a",
      "\u95a0\u70fb",
      "\u95a1\u70dc",
      "\u95a2\u70bd",
      "\u95a3\u709e",
      "\u95a4\u707f",
      "\u95a5\u7060",
      "\u95a6\u7041",
      "\u95a7\u7022",
      "\u95a8\u7003",
      "\u95a9\u6fe4",
      "\u95aa\u6fc5",
      "\u95ab\u6fa6",
      "\u95ac\u6f87",
      "\u95ad\u6f68",
      "\u95ae\u6f49",
      "\u95af\u6f2a",
      "\u95b0\u6f0b",
      "\u95b1\u6eec",
      "\u95b2\u6ecd",
      "\u95b3\u6eae",
      "\u95b4\u6e8f",
      "\u95b5\u6e70",
      "\u95b6\u6e51",
      "\u95b7\u6e32",
      "\u95b8\u6e13",
      "\u95b9\u6df4",
      "\u95ba\u6dd5",
      "\u95bb\u6db6",
      "\u95bc\u6d97",
      "\u95bd\u6d78",
      "\u95be\u6d59",
      "\u95bf\u6d3a",
      "\u95c0\u6d1b",
      "\u95c1\u6cfc",
      "\u95c2\u6cdd",
      "\u95c3\u6cbe",
      "\u95c4\u6c9f",
      "\u95c5\u6c80",
      "\u95c6\u6c61",
      "\u95c7\u6c42",
      "\u95c8\u6c23",
      "\u95c9\u6c04",
      "\u95ca\u6be5",
      "\u95cb\u6bc6",
      "\u95cc\u6ba7",
      "\u95cd\u6b88",
      "\u95ce\u6b69",
      "\u95cf\u6b4a",
      "\u95d0\u6b2b",
      "\u95d1\u6b0c",
      "\u95d2\u6aed",
      "\u95d3\u6ace",
      "\u95d4\u6aaf",
      "\u95d5\u6a90",
      "\u95d6\u6a71",
      "\u95d7\u6a52",
      "\u95d8\u6a33",
      "\u95d9\u6a14",
      "\u95da\u69f5",
      "\u95db\u69d6",
      "\u95dc\u69b7",
      "\u95dd\u6998",
      "\u95de\u6979",
      "\u95df\u695a",
      "\u95e0\u693b",
      "\u95e1\u691c",
      "\u95e2\u68fd",
      "\u95e3\u68de",
      "\u95e4\u68bf",
      "\u95e5\u68a0",
      "\u95e6\u6881",
      "\u95e7\u6862",
      "\u95e8\u6843",
      "\u95e9\u6824",
      "\u95ea\u6805",
      "\u95eb\u67e6",
      "\u95ec\u67c7",
      "\u95ed\u67a8",
      "\u95ee\u6789",
      "\u95ef\u676a",
      "\u95f0\u674b",
      "\u95f1\u672c",
      "\u95f2\u670d",
      "\u95f3\u66ee",
      "\u95f4\u66cf",
      "\u95f5\u66b0",
      "\u95f6\u6691",
      "\u95f7\u6672",
      "\u95f8\u6653",
      "\u95f9\u6634",
      "\u95fa\u6615",
      "\u95fb\u65f6",
      "\u95fc\u65d7",
      "\u95fd\u65b8",
      "\u95fe\u6599",
      "\u95ff\u657a",
      "\u9600\u655b",
      "\u9601\u653c",
      "\u9602\u651d",
      "\u9603\u64fe",
      "\u9604\u64df",
      "\u9605\u64c0",
      "\u9606\u64a1",
      "\u9607\u6482",
      "\u9608\u6463",
      "\u9609\u6444",
      "\u960a\u6425",
      "\u960b\u6406",
      "\u960c\u63e7",
      "\u960d\u63c8",
      "\u960e\u63a9",
      "\u960f\u638a",
      "\u9610\u636b",
      "\u9611\u634c",
      "\u9612\u632d",
      "\u9613\u630e",
      "\u9614\u62ef",
      "\u9615\u62d0",
      "\u9616\u62b1",
      "\u9617\u6292",
      "\u9618\u6273",
      "\u9619\u6254",
      "\u961a\u6235",
      "\u961b\u6216",
      "\u961c\u61f7",
      "\u961d\u61d8",
      "\u961e\u61b9",
      "\u961f\u619a",
      "\u9620\u617b",
      "\u9621\u615c",
      "\u9622\u613d",
      "\u9623\u611e",
      "\u9624\u60ff",
      "\u9625\u60e0",
      "\u9626\u60c1",
      "\u9627\u60a2",
      "\u9628\u6083",
      "\u9629\u6064",
      "\u962a\u6045",
      "\u962b\u6026",
      "\u962c\u6007",
      "\u962d\u5fe8",
      "\u962e\u5fc9",
      "\u962f\u5faa",
      "\u9630\u5f8b",
      "\u9631\u5f6c",
      "\u9632\u5f4d",
      "\u9633\u5f2e",
      "\u9634\u5f0f",
      "\u9635\u5ef0",
      "\u9636\u5ed1",
      "\u9637\u5eb2",
      "\u9638\u5e93",
      "\u9639\u5e74",
      "\u963a\u5e55",
      "\u963b\u5e36",
      "\u963c\u5e17",
      "\u963d\u5df8",
      "\u963e\u5dd9",
      "\u963f\u5dba",
      "\u9640\u5d9b",
      "\u9641\u5d7c",
      "\u9642\u5d5d",
      "\u9643\u5d3e",
      "\u9644\u5d1f",
      "\u9645\u5d00",
      "\u9646\u5ce1",
      "\u9647\u5cc2",
      "\u9648\u5ca3",
      "\u9649\u5c84",
      "\u964a\u5c65",
      "\u964b\u5c46",
      "\u964c\u5c27",
      "\u964d\u5c08",
      "\u964e\u5be9",
      "\u964f\u5bca",
      "\u9650\u5bab",
      "\u9651\u5b8c",
      "\u9652\u5b6d",
      "\u9653\u5b4e",
      "\u9654\u5b2f",
      "\u9655\u5b10",
      "\u9656\u5af1",
      "\u9657\u5ad2",
      "\u9658\u5ab3",
      "\u9659\u5a94",
      "\u965a\u5a75",
      "\u965b\u5a56",
      "\u965c\u5a37",
      "\u965d\u5a18",
      "\u965e\u59f9",
      "\u965f\u59da",
      "\u9660\u59bb",
      "\u9661\u599c",
      "\u9662\u597d",
      "\u9663\u595e",
      "\u9664\u593f",
      "\u9665\u5920",
      "\u9666\u5901",
      "\u9667\u58e2",
      "\u9668\u58c3",
      "\u9669\u58a4",
      "\u966a\u5885",
      "\u966b\u5866",
      "\u966c\u5847",
      "\u966d\u5828",
      "\u966e\u5809",
      "\u966f\u57ea",
      "\u9670\u57cb",
      "\u9671\u57ac",
      "\u9672\u578d",
      "\u9673\u576e",
      "\u9674\u574f",
      "\u9675\u5730",
      "\u9676\u5711",
      "\u9677\u56f2",
      "\u9678\u56d3",
      "\u9679\u56b4",
      "\u967a\u5695",
      "\u967b\u5676",
      "\u967c\u5657",
      "\u967d\u5638",
      "\u967e\u5619",
      "\u967f\u55fa",
      "\u9680\u55db",
      "\u9681\u55bc",
      "\u9682\u559d",
      "\u9683\u557e",
      "\u9684\u555f",
      "\u9685\u5540",
      "\u9686\u5521",
      "\u9687\u5502",
      "\u9688\u54e3",
      "\u9689\u54c4",
      "\u968a\u54a5",
      "\u968b\u5486",
      "\u968c\u5467",
      "\u968d\u5448",
      "\u968e\u5429",
      "\u968f\u540a",
      "\u9690\u53eb",
      "\u9691\u53cc",
      "\u9692\u53ad",
      "\u9693\u538e",
      "\u9694\u536f",
      "\u9695\u5350",
      "\u9696\u5331",
      "\u9697\u5312",
      "\u9698\u52f3",
      "\u9699\u52d4",
      "\u969a\u52b5",
      "\u969b\u5296",
      "\u969c\u5277",
      "\u969d\u5258",
      "\u969e\u5239",
      "\u969f\u521a",
      "\u96a0\u51fb",
      "\u96a1\u51dc",
      "\u96a2\u51bd",
      "\u96a3\u519e",
      "\u96a4\u517f",
      "\u96a5\u5160",
      "\u96a6\u5141",
      "\u96a7\u5122",
      "\u96a8\u5103",
      "\u96a9\u50e4",
      "\u96aa\u50c5",
      "\u96ab\u50a6",
      "\u96ac\u5087",
      "\u96ad\u5068",
      "\u96ae\u5049",
      "\u96af\u502a",
      "\u96b0\u500b",
      "\u96b1\u4fec",
      "\u96b2\u4fcd",
      "\u96b3\u4fae",
      "\u96b4\u4f8f",
      "\u96b5\u4f70",
      "\u96b6\u4f51",
      "\u96b7\u4f32",
      "\u96b8\u4f13",
      "\u96b9\u4ef4",
      "\u96ba\u4ed5",
      "\u96bb\u4eb6",
      "\u96bc\u4e97",
      "\u96bd\u4e78",
      "\u96be\u4e59",
      "\u96bf\u4e3a",
      "\u96c0\u4e1b",
      "\u96c1\u4dfc",
      "\u96c2\u4ddd",
      "\u96c3\u4dbe",
      "\u96c4\u4d9f",
      "\u96c5\u4d80",
      "\u96c6\u4d61",
      "\u96c7\u4d42",
      "\u96c8\u4d23",
      "\u96c9\u4d04",
      "\u96ca\u4ce5",
      "\u96cb\u4cc6",
      "\u96cc\u4ca7",
      "\u96cd\u4c88",
      "\u96ce\u4c69",
      "\u96cf\u4c4a",
      "\u96d0\u4c2b",
      "\u96d1\u4c0c",
      "\u96d2\u4bed",
      "\u96d3\u4bce",
      "\u96d4\u4baf",
      "\u96d5\u4b90",
      "\u96d6\u4b71",
      "\u96d7\u4b52",
      "\u96d8\u4b33",
      "\u96d9\u4b14",
      "\u96da\u4af5",
      "\u96db\u4ad6",
      "\u96dc\u4ab7",
      "\u96dd\u4a98",
      "\u96de\u4a79",
      "\u96df\u4a5a",
      "\u96e0\u4a3b",
      "\u96e1\u4a1c",
      "\u96e2\u49fd",
      "\u96e3\u49de",
      "\u96e4\u49bf",
      "\u96e5\u49a0",
      "\u96e6\u4981",
      "\u96e7\u4962",
      "\u96e8\u4943",
      "\u96e9\u4924",
      "\u96ea\u4905",
      "\u96eb\u48e6",
      "\u96ec\u48c7",
      "\u96ed\u48a8",
      "\u96ee\u4889",
      "\u96ef\u486a",
      "\u96f0\u484b",
      "\u96f1\u482c",
      "\u96f2\u480d",
      "\u96f3\u47ee",
      "\u96f4\u47cf",
      "\u96f5\u47b0",
      "\u96f6\u4791",
      "\u96f7\u4772",
      "\u96f8\u4753",
      "\u96f9\u4734",
      "\u96fa\u4715",
      "\u96fb\u46f6",
      "\u96fc\u46d7",
      "\u96fd\u46b8",
      "\u96fe\u4699",
      "\u96ff\u467a",
      "\u9700\u465b",
      "\u9701\u463c",
      "\u9702\u461d",
      "\u9703\u45fe",
      "\u9704\u45df",
      "\u9705\u45c0",
      "\u9706\u45a1",
      "\u9707\u4582",
      "\u9708\u4563",
      "\u9709\u4544",
      "\u970a\u4525",
      "\u970b\u4506",
      "\u970c\u44e7",
      "\u970d\u44c8",
      "\u970e\u44a9",
      "\u970f\u448a",
      "\u9710\u446b",
      "\u9711\u444c",
      "\u9712\u442d",
      "\u9713\u440e",
      "\u9714\u43ef",
      "\u9715\u43d0",
      "\u9716\u43b1",
      "\u9717\u4392",
      "\u9718\u4373",
      "\u9719\u4354",
      "\u971a\u4335",
      "\u971b\u4316",
      "\u971c\u42f7",
      "\u971d\u42d8",
      "\u971e\u42b9",
      "\u971f\u429a",
      "\u9720\u427b",
      "\u9721\u425c",
      "\u9722\u423d",
      "\u9723\u421e",
      "\u9724\u41ff",
      "\u9725\u41e0",
      "\u9726\u41c1",
      "\u9727\u41a2",
      "\u9728\u4183",
      "\u9729\u4164",
      "\u972a\u4145",
      "\u972b\u4126",
      "\u972c\u4107",
      "\u972d\u40e8",
      "\u972e\u40c9",
      "\u972f\u40aa",
      "\u9730\u408b",
      "\u9731\u406c",
      "\u9732\u404d",
      "\u9733\u402e",
      "\u9734\u400f",
      "\u9735\u3ff0",
      "\u9736\u3fd1",
      "\u9737\u3fb2",
      "\u9738\u3f93",
      "\u9739\u3f74",
      "\u973a\u3f55",
      "\u973b\u3f36",
      "\u973c\u3f17",
      "\u973d\u3ef8",
      "\u973e\u3ed9",
      "\u973f\u3eba",
      "\u9740\u3e9b",
      "\u9741\u3e7c",
      "\u9742\u3e5d",
      "\u9743\u3e3e",
      "\u9744\u3e1f",
      "\u9745\u3e00",
      "\u9746\u3de1",
      "\u9747\u3dc2",
      "\u9748\u3da3",
      "\u9749\u3d84",
      "\u974a\u3d65",
      "\u974b\u3d46",
      "\u974c\u3d27",
      "\u974d\u3d08",
      "\u974e\u3ce9",
      "\u974f\u3cca",
      "\u9750\u3cab",
      "\u9751\u3c8c",
      "\u9752\u3c6d",
      "\u9753\u3c4e",
      "\u9754\u3c2f",
      "\u9755\u3c10",
      "\u9756\u3bf1",
      "\u9757\u3bd2",
      "\u9758\u3bb3",
      "\u9759\u3b94",
      "\u975a\u3b75",
      "\u975b\u3b56",
      "\u975c\u3b37",
      "\u975d\u3b18",
      "\u975e\u3af9",
      "\u975f\u3ada",
      "\u9760\u3abb",
      "\u9761\u3a9c",
      "\u9762\u3a7d",
      "\u9763\u3a5e",
      "\u9764\u3a3f",
      "\u9765\u3a20",
      "\u9766\u3a01",
      "\u9767\u39e2",
      "\u9768\u39c3",
      "\u9769\u39a4",
      "\u976a\u3985",
      "\u976b\u3966",
      "\u976c\u3947",
      "\u976d\u3928",
      "\u976e\u3909",
      "\u976f\u38ea",
      "\u9770\u38cb",
      "\u9771\u38ac",
      "\u9772\u388d",
      "\u9773\u386e",
      "\u9774\u384f",
      "\u9775\u3830",
      "\u9776\u3811",
      "\u9777\u37f2",
      "\u9778\u37d3",
      "\u9779\u37b4",
      "\u977a\u3795",
      "\u977b\u3776",
      "\u977c\u3757",
      "\u977d\u3738",
      "\u977e\u3719",
      "\u977f\u36fa",
      "\u9780\u36db",
      "\u9781\u36bc",
      "\u9782\u369d",
      "\u9783\u367e",
      "\u9784\u365f",
      "\u9785\u3640",
      "\u9786\u3621",
      "\u9787\u3602",
      "\u9788\u35e3",
      "\u9789\u35c4",
      "\u978a\u35a5",
      "\u978b\u3586",
      "\u978c\u3567",
      "\u978d\u3548",
      "\u978e\u3529",
      "\u978f\u350a",
      "\u9790\u34eb",
      "\u9791\u34cc",
      "\u9792\u34ad",
      "\u9793\u348e",
      "\u9794\u346f",
      "\u9795\u3450",
      "\u9796\u3431",
      "\u9797\u3412",
      "\u9798\u33f3",
      "\u9799\u33d4",
      "\u979a\u33b5",
      "\u979b\u3396",
      "\u979c\u3377",
      "\u979d\u3358",
      "\u979e\u3339",
      "\u979f\u331a",
      "\u97a0\u32fb",
      "\u97a1\u32dc",
      "\u97a2\u32bd",
      "\u97a3\u329e",
      "\u97a4\u327f",
      "\u97a5\u3260",
      "\u97a6\u3241",
      "\u97a7\u3222",
      "\u97a8\u3203",
      "\u97a9\u31e4",
      "\u97aa\u31c5",
      "\u97ab\u31a6",
      "\u97ac\u3187",
      "\u97ad\u3168",
      "\u97ae\u3149",
      "\u97af\u312a",
      "\u97b0\u310b",
      "\u97b1\u30ec",
      "\u97b2\u30cd",
      "\u97b3\u30ae",
      "\u97b4\u308f",
      "\u97b5\u3070",
      "\u97b6\u3051",
      "\u97b7\u3032",
      "\u97b8\u3013",
      "\u97b9\u2ff4",
      "\u97ba\u2fd5",
      "\u97bb\u2fb6",
      "\u97bc\u2f97",
      "\u97bd\u2f78",
      "\u97be\u2f59",
      "\u97bf\u2f3a",
      "\u97c0\u2f1b",
      "\u97c1\u2efc",
      "\u97c2\u2edd",
      "\u97c3\u2ebe",
      "\u97c4\u2e9f",
      "\u97c5\u2e80",
      "\u97c6\u2e61",
      "\u97c7\u2e42",
      "\u97c8\u2e23",
      "\u97c9\u2e04",
      "\u97ca\u2de5",
      "\u97cb\u2dc6",
      "\u97cc\u2da7",
      "\u97cd\u2d88",
      "\u97ce\u2d69",
      "\u97cf\u2d4a",
      "\u97d0\u2d2b",
      "\u97d1\u2d0c",
      "\u97d2\u2ced",
      "\u97d3\u2cce",
      "\u97d4\u2caf",
      "\u97d5\u2c90",
      "\u97d6\u2c71",
      "\u97d7\u2c52",
      "\u97d8\u2c33",
      "\u97d9\u2c14",
      "\u97da\u2bf5",
      "\u97db\u2bd6",
      "\u97dc\u2bb7",
      "\u97dd\u2b98",
      "\u97de\u2b79",
      "\u97df\u2b5a",
      "\u97e0\u2b3b",
      "\u97e1\u2b1c",
      "\u97e2\u2afd",
      "\u97e3\u2ade",
      "\u97e4\u2abf",
      "\u97e5\u2aa0",
      "\u97e6\u2a81",
      "\u97e7\u2a62",
      "\u97e8\u2a43",
      "\u97e9\u2a24",
      "\u97ea\u2a05",
      "\u97eb\u29e6",
      "\u97ec\u29c7",
      "\u97ed\u29a8",
      "\u97ee\u2989",
      "\u97ef\u296a",
      "\u97f0\u294b",
      "\u97f1\u292c",
      "\u97f2\u290d",
      "\u97f3\u28ee",
      "\u97f4\u28cf",
      "\u97f5\u28b0",
      "\u97f6\u2891",
      "\u97f7\u2872",
      "\u97f8\u2853",
      "\u97f9\u2834",
      "\u97fa\u2815",
      "\u97fb\u27f6",
      "\u97fc\u27d7",
      "\u97fd\u27b8",
      "\u97fe\u2799",
      "\u97ff\u277a",
      "\u9800\u275b",
      "\u9801\u273c",
      "\u9802\u271d",
      "\u9803\u26fe",
      "\u9804\u26df",
      "\u9805\u26c0",
      "\u9806\u26a1",
      "\u9807\u2682",
      "\u9808\u2663",
      "\u9809\u2644",
      "\u980a\u2625",
      "\u980b\u2606",
      "\u980c\u25e7",
      "\u980d\u25c8",
      "\u980e\u25a9",
      "\u980f\u258a",
      "\u9810\u256b",
      "\u9811\u254c",
      "\u9812\u252d",
      "\u9813\u250e",
      "\u9814\u24ef",
      "\u9815\u24d0",
      "\u9816\u24b1",
      "\u9817\u2492",
      "\u9818\u2473",
      "\u9819\u2454",
      "\u981a\u2435",
      "\u981b\u2416",
      "\u981c\u23f7",
      "\u981d\u23d8",
      "\u981e\u23b9",
      "\u981f\u239a",
      "\u9820\u237b",
      "\u9821\u235c",
      "\u9822\u233d",
      "\u9823\u231e",
      "\u9824\u22ff",
      "\u9825\u22e0",
      "\u9826\u22c1",
      "\u9827\u22a2",
      "\u9828\u2283",
      "\u9829\u2264",
      "\u982a\u2245",
      "\u982b\u2226",
      "\u982c\u2207",
      "\u982d\u21e8",
      "\u982e\u21c9",
      "\u982f\u21aa",
      "\u9830\u218b",
      "\u9831\u216c",
      "\u9832\u214d",
      "\u9833\u212e",
      "\u9834\u210f",
      "\u9835\u20f0",
      "\u9836\u20d1",
      "\u9837\u20b2",
      "\u9838\u2093",
      "\u9839\u2074",
      "\u983a\u2055",
      "\u983b\u2036",
      "\u983c\u2017",
      "\u983d\u1ff8",
      "\u983e\u1fd9",
      "\u983f\u1fba",
      "\u9840\u1f9b",
      "\u9841\u1f7c",
      "\u9842\u1f5d",
      "\u9843\u1f3e",
      "\u9844\u1f1f",
      "\u9845\u1f00",
      "\u9846\u1ee1",
      "\u9847\u1ec2",
      "\u9848\u1ea3",
      "\u9849\u1e84",
      "\u984a\u1e65",
      "\u984b\u1e46",
      "\u984c\u1e27",
      "\u984d\u1e08",
      "\u984e\u1de9",
      "\u984f\u1dca",
      "\u9850\u1dab",
      "\u9851\u1d8c",
      "\u9852\u1d6d",
      "\u9853\u1d4e",
      "\u9854\u1d2f",
      "\u9855\u1d10",
      "\u9856\u1cf1",
      "\u9857\u1cd2",
      "\u9858\u1cb3",
      "\u9859\u1c94",
      "\u985a\u1c75",
      "\u985b\u1c56",
      "\u985c\u1c37",
      "\u985d\u1c18",
      "\u985e\u1bf9",
      "\u985f\u1bda",
      "\u9860\u1bbb",
      "\u9861\u1b9c",
      "\u9862\u1b7d",
      "\u9863\u1b5e",
      "\u9864\u1b3f",
      "\u9865\u1b20",
      "\u9866\u1b01",
      "\u9867\u1ae2",
      "\u9868\u1ac3",
      "\u9869\u1aa4",
      "\u986a\u1a85",
      "\u986b\u1a66",
      "\u986c\u1a47",
      "\u986d\u1a28",
      "\u986e\u1a09",
      "\u986f\u19ea",
      "\u9870\u19cb",
      "\u9871\u19ac",
      "\u9872\u198d",
      "\u9873\u196e",
      "\u9874\u194f",
      "\u9875\u1930",
      "\u9876\u1911",
      "\u9877\u18f2",
      "\u9878\u18d3",
      "\u9879\u18b4",
      "\u987a\u1895",
      "\u987b\u1876",
      "\u987c\u1857",
      "\u987d\u1838",
      "\u987e\u1819",
      "\u987f\u17fa",
      "\u9880\u17db",
      "\u9881\u17bc",
      "\u9882\u179d",
      "\u9883\u177e",
      "\u9884\u175f",
      "\u9885\u1740",
      "\u9886\u1721",
      "\u9887\u1702",
      "\u9888\u16e3",
      "\u9889\u16c4",
      "\u988a\u16a5",
      "\u988b\u1686",
      "\u988c\u1667",
      "\u988d\u1648",
      "\u988e\u1629",
      "\u988f\u160a",
      "\u9890\u15eb",
      "\u9891\u15cc",
      "\u9892\u15ad",
      "\u9893\u158e",
      "\u9894\u156f",
      "\u9895\u1550",
      "\u9896\u1531",
      "\u9897\u1512",
      "\u9898\u14f3",
      "\u9899\u14d4",
      "\u989a\u14b5",
      "\u989b\u1496",
      "\u989c\u1477",
      "\u989d\u1458",
      "\u989e\u1439",
      "\u989f\u141a",
      "\u98a0\u13fb",
      "\u98a1\u13dc",
      "\u98a2\u13bd",
      "\u98a3\u139e",
      "\u98a4\u137f",
      "\u98a5\u1360",
      "\u98a6\u1341",
      "\u98a7\u1322",
      "\u98a8\u1303",
      "\u98a9\u12e4",
      "\u98aa\u12c5",
      "\u98ab\u12a6",
      "\u98ac\u1287",
      "\u98ad\u1268",
      "\u98ae\u1249",
      "\u98af\u122a",
      "\u98b0\u120b",
      "\u98b1\u11ec",
      "\u98b2\u11cd",
      "\u98b3\u11ae",
      "\u98b4\u118f",
      "\u98b5\u1170",
      "\u98b6\u1151",
      "\u98b7\u1132",
      "\u98b8\u1113",
      "\u98b9\u10f4",
      "\u98ba\u10d5",
      "\u98bb\u10b6",
      "\u98bc\u1097",
      "\u98bd\u1078",
      "\u98be\u1059",
      "\u98bf\u103a",
      "\u98c0\u101b",
      "\u98c1\u0ffc",
      "\u98c2\u0fdd",
      "\u98c3\u0fbe",
      "\u98c4\u0f9f",
      "\u98c5\u0f80",
      "\u98c6\u0f61",
      "\u98c7\u0f42",
      "\u98c8\u0f23",
      "\u98c9\u0f04",
      "\u98ca\u0ee5",
      "\u98cb\u0ec6",
      "\u98cc\u0ea7",
      "\u98cd\u0e88",
      "\u98ce\u0e69",
      "\u98cf\u0e4a",
      "\u98d0\u0e2b",
      "\u98d1\u0e0c",
      "\u98d2\u0ded",
      "\u98d3\u0dce",
      "\u98d4\u0daf",
      "\u98d5\u0d90",
      "\u98d6\u0d71",
      "\u98d7\u0d52",
      "\u98d8\u0d33",
      "\u98d9\u0d14",
      "\u98da\u0cf5",
      "\u98db\u0cd6",
      "\u98dc\u0cb7",
      "\u98dd\u0c98",
      "\u98de\u0c79",
      "\u98df\u0c5a",
      "\u98e0\u0c3b",
      "\u98e1\u0c1c",
      "\u98e2\u0bfd",
      "\u98e3\u0bde",
      "\u98e4\u0bbf",
      "\u98e5\u0ba0",
      "\u98e6\u0b81",
      "\u98e7\u0b62",
      "\u98e8\u0b43",
      "\u98e9\u0b24",
      "\u98ea\u0b05",
      "\u98eb\u0ae6",
      "\u98ec\u0ac7",
      "\u98ed\u0aa8",
      "\u98ee\u0a89",
      "\u98ef\u0a6a",
      "\u98f0\u0a4b",
      "\u98f1\u0a2c",
      "\u98f2\u0a0d",
      "\u98f3\u09ee",
      "\u98f4\u09cf",
      "\u98f5\u09b0",
      "\u98f6\u0991",
      "\u98f7\u0972",
      "\u98f8\u0953",
      "\u98f9\u0934",
      "\u98fa\u0915",
      "\u98fb\u08f6",
      "\u98fc\u08d7",
      "\u98fd\u08b8",
      "\u98fe\u0899",
      "\u98ff\u087a",
      "\u9900\u085b",
      "\u9901\u083c",
      "\u9902\u081d",
      "\u9903\u07fe",
      "\u9904\u07df",
      "\u9905\u07c0",
      "\u9906\u07a1",
      "\u9907\u0782",
      "\u9908\u0763",
      "\u9909\u0744",
      "\u990a\u0725",
      "\u990b\u0706",
      "\u990c\u06e7",
      "\u990d\u06c8",
      "\u990e\u06a9",
      "\u990f\u068a",
      "\u9910\u066b",
      "\u9911\u064c",
      "\u9912\u062d",
      "\u9913\u060e",
      "\u9914\u05ef",
      "\u9915\u05d0",
      "\u9916\u05b1",
      "\u9917\u0592",
      "\u9918\u0573",
      "\u9919\u0554",
      "\u991a\u0535",
      "\u991b\u0516",
      "\u991c\u04f7",
      "\u991d\u04d8",
      "\u991e\u04b9",
      "\u991f\u049a",
      "\u9920\u047b",
      "\u9921\u045c",
      "\u9922\u043d",
      "\u9923\u041e",
      "\u9924\u03ff",
      "\u9925\u03e0",
      "\u9926\u03c1",
      "\u9927\u03a2",
      "\u9928\u0383",
      "\u9929\u0364",
      "\u992a\u0345",
      "\u992b\u0326",
      "\u992c\u0307",
      "\u992d\u02e8",
      "\u992e\u02c9",
      "\u992f\u02aa",
      "\u9930\u028b",
      "\u9931\u026c",
      "\u9932\u024d",
      "\u9933\u022e",
      "\u9934\u020f",
      "\u9935\u01f0",
      "\u9936\u01d1",
      "\u9937\u01b2",
      "\u9938\u0193",
      "\u9939\u0174",
      "\u993a\u0155",
      "\u993b\u0136",
      "\u993c\u0117",
      "\u993d\u00f8",
      "\u993e\u00d9",
      "\u993f\u00ba",
      "\u9940\u009b",
      "\u9941\u007c",
      "\u9942\u005d",
      "\u9943\u003e",
      "\u9944\u001f",
  };

A one single collection could be more self-contained

Currently it's quite hard to pick one collection, say FastList out of the whole without pulling in with it about a billion other classes. This in turn makes any reuse with additions/changes a majorly divergent fork any way one might try to do it.

Type-safe `containsKey` `get`, et al

Hello.

The standard JDK Map<K, V> interfaces contain methods such as containsKey that take an Object instead of a K, throwing away type-safety. I believe this is now considered to be a serious historical mistake and dangerous to the point that some IDEs have added specific checks to warn users when they might be using keys that aren't subtypes of K. I'm wondering if there are any plans to add additional type-safe replacement methods to the MutableMap and ImmutableMap interfaces specified in the GS API? Something along the lines of:

Optional<V> retrieve(K k)
boolean hasKey(K k);

... or:

@Nullable V retrieve(K k)

... if a dependency on Java 8 isn't allowed.

As far as I can tell, the implementations would be trivial and non-intrusive, and would obviously just be defined in terms of the existing unsafe methods.

ArrayIndexOutOfBoundsException for MutableLongObjectMap.withoutAllKeys

I'm using version 6.1.0 when I ran across the following error:

java.lang.ArrayIndexOutOfBoundsException: 16
    at com.gs.collections.impl.map.mutable.primitive.LongObjectHashMap$KeysSetIterator.next(LongObjectHashMap.java:3725)
    at com.gs.collections.impl.iterator.UnmodifiableLongIterator.next(UnmodifiableLongIterator.java:42)
    at com.gs.collections.impl.lazy.primitive.SelectLongIterable$SelectLongIterator.hasNext(SelectLongIterable.java:233)
    at com.gs.collections.impl.map.mutable.primitive.LongObjectHashMap.withoutAllKeys(LongObjectHashMap.java:2574)

StringIterate.csvTokensTo* methods lack support for quoted field

csv is not as simple as StringIterate.tokensToList(string, ",");, a csv parser should be able to support quoted field which means comma within double quoted field should not be treated as a delimit.

test case:

String str = "a, b,\ "c,d"";
Verify.assertListsEqual(FastList.newListWith("a", "b", "c,d"), StringIterate.csvTokensToList(str));

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.