Coder Social home page Coder Social logo

goldmansachs / gs-collections Goto Github PK

View Code? Open in Web Editor NEW
1.8K 1.8K 286.0 12.63 MB

GS Collections has been migrated to the Eclipse Foundation, re-branded as Eclipse Collections. https://www.eclipse.org/collections/

Home Page: https://www.eclipse.org/collections/

Java 98.72% Scala 1.28%

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

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 :)

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

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!

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

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)

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!

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.

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.

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

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",
  };

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.

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.

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));

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.

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;
    }

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.

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)

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

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.