Ken Wakasa
b03447e1af
Move a couple classes to the utils package
...
Change-Id: Ia14a2011d79bad7cd02697b9254705f6e2099442
2013-07-19 10:46:46 +09:00
Ken Wakasa
e28eba5074
Move util classes to the latin/utils directory
...
Change-Id: I1c5b27c8edf231680edb8d96f63b9d04cfc6a6fa
2013-06-24 17:04:40 +09:00
Jean Chalard
1562fc91f0
Make it easy to open several dictionaries from tests
...
Bug: 9127175
Change-Id: I3f1840ee73b364df26dfddb5acb10001e0f2cb61
2013-05-31 15:36:05 +09:00
Tadashi G. Takaoka
740d829092
Merge "Use localized toLowerString in AutoCorrection.isValidWord"
2013-05-24 20:00:38 +00:00
Tadashi G. Takaoka
94027c7201
Use Locale.ROOT for locale neutral operations
...
Bug: 9112465
Change-Id: I6cd63007287b5a1a57cfbabff35d53f66fc5620e
2013-05-24 12:07:30 -07:00
Tadashi G. Takaoka
618407ab7e
Use localized toLowerString in AutoCorrection.isValidWord
...
Bug: 9112465
Change-Id: I63eb4115f393444560e80220d4c90f0f7101b934
2013-05-24 11:47:36 -07:00
Tadashi G. Takaoka
ebe0544fc8
Remove redundant method AutoCorrection.isInTheDictionary
...
Change-Id: I0737fb0b68f411f4db06014f2d94804935808922
2013-05-24 11:40:03 -07:00
Jean Chalard
2dbb5957e3
Pass blockOffensiveWords as a parameter
...
Bug: 8773353
Change-Id: Ic1019742ce7ff6e4f7fff4d2729f8ab52d841488
2013-05-01 20:47:35 +09:00
Jean Chalard
d91268ad9f
Initialize dictionaries at onStartInputView
...
Bug: 8344402
Change-Id: I41b8440f0d72a66fde3f6feb0db8239c9bb10ea3
2013-04-18 14:48:42 +09:00
Jean Chalard
a5a2f3e3c7
Remove gesture suggestions with an INT_MIN score
...
Bug: 7980115
Change-Id: I8de31068992aec712eaad132857d9dc61f28e30a
2013-04-15 20:55:49 +09:00
Jean Chalard
d40f3f6bc1
Reject a previously user-refused suggestion.
...
If the user gestures a word, then hits backspace in
disapproval, and gestures about the same thing again,
make sure that we don't suggest the same thing again.
Bug: 7549311
Change-Id: I793bc4df7c3841fa8f2f4146707c26e873f374c1
2013-04-15 16:36:44 +09:00
Jean Chalard
99b93d17d5
Fix a bug where autocorrection status would be wrong.
...
Change-Id: Ic220129dc59f585164dbf63591cd1c96de17fe6f
2013-04-10 17:49:19 +09:00
Jean Chalard
01a4ebcd88
Add a way to know externally if we're installing a new dict
...
That helps tests know when to wait and when to declare the
dictionary actually not usable.
Bug: 7925814
Change-Id: Ic963c1206c43e3cde39ac4214a0d601f4fc6c03b
2013-01-31 09:04:55 +09:00
Tadashi G. Takaoka
8aa9963a89
Fix Apache license comment
...
Change-Id: Ic56167f952a7f4449da366e1e81610e72c966086
2013-01-21 22:23:37 +09:00
Ken Wakasa
f6870cc82d
Remove BinaryDictionary.MAX_PREDICTION and MAX_SPACES, and rename MAX_WORDS to MAX_RESULTS
...
Change-Id: Iab2a422b367e7521f346481c7fe5e2575f2e9de3
2013-01-11 20:47:42 +09:00
Tadashi G. Takaoka
240871ecaf
Move code point constants from Keyboard to Constants class
...
Change-Id: Iee01d4d2b916d0b584531104ac865ae6e6370a3d
2012-10-29 16:04:20 +09:00
Tadashi G. Takaoka
7f77aed507
Merge "Replace useless CharSequence to String"
2012-10-22 14:27:35 -07:00
Tadashi G. Takaoka
15f6d4ae34
Add @UsedForTesting and @ExternallyReferenced annotations
...
Bug: 7268357
Change-Id: I0b7e0c19f04af9ae30874d0a4c26ad81bc80be8c
2012-10-22 11:18:43 -07:00
Tadashi G. Takaoka
bc464e2952
Replace useless CharSequence to String
...
Change-Id: Idc478f901185ee1b4912acc82d0cbc54fee4e991
2012-10-22 11:03:28 -07:00
Tadashi G. Takaoka
a28a05e971
Cleanup: Make some classes as final
...
Change-Id: I6009b3c1950ba32b7f1e205a3db2307fe0cd688e
2012-09-27 19:03:30 +09:00
Satoshi Kataoka
87cecf7db6
Log for geometric input
...
Change-Id: Ia0f0e38086b0be70cf2d04fc6fae48358f16e74f
2012-09-19 17:45:27 +09:00
Tadashi G. Takaoka
f035649cb6
Asynchronously look up dictionary for gesture input
...
Bug: 7149248
Change-Id: Icba2db73508b89a85828ae9e196ab618e5e6c280
2012-09-14 02:12:11 -07:00
Jean Chalard
8c06a468e0
Stop auto-correcting non-whitelisted one-char strings
...
Bug: 7134017
Change-Id: I75cf474dedafda3e1683dd8f7740c13aafdcf5ab
2012-09-11 17:24:08 +09:00
Tadashi G. Takaoka
5f282ea9e4
Add CollectionUtils class to create generic collection easily
...
Change-Id: I6b4de9187e122298e5e9cd8ddc9070d062df6a89
2012-08-22 10:21:38 +09:00
Jean Chalard
1eba97d92f
Treat all caps for gesture input.
...
Bug: 6950087
Change-Id: I9f2271780600572c9befa96c7ad98494c554dd2b
2012-08-21 20:29:53 +09:00
Jean Chalard
adbd9ae105
Tell the shift mode to the word composer.
...
Bug: 6950087
Change-Id: Ifab9d6d075af398c6468d081216488712f8a53fb
2012-08-21 20:27:42 +09:00
Jean Chalard
46fc768e54
Remove the whitelist dictionary.
...
The functionality now lives in the binary dictionary.
This finalizes work on
Bug: 6906525
Change-Id: Id106d871e8afdf9afa886d2a30bea87ff89f2d24
2012-08-17 15:13:10 +09:00
Jean Chalard
3e43e6998e
Remove access to the whitelist class.
...
...which becomes useless. It will be entirely removed in an
upcoming change.
Change-Id: I2f1d27f1eceda79454b01f21e057b98f2953131a
2012-08-17 13:01:25 +09:00
Satoshi Kataoka
3979f060f0
Step 28-A Introduce the session Id to getSuggestion
...
Change-Id: I39d9bf1a7c272eb16d6ed4698f52457579b40f10
2012-08-15 15:44:45 +09:00
Jean Chalard
7b258e512d
Accept whitelisted entries from any source.
...
...not only the WhitelistDictionary.
Bug: 6906525
Change-Id: I7f181eb6936ec17bbccdc4e736fd09292af24e9c
2012-08-10 19:02:19 +09:00
Jean Chalard
caed149b67
Optimization & Simplification
...
It's useless to do the whitelist lookup twice. Also, putting
this test out of this method will allow whitelist entries to
come from other sources.
Bug: 6906525
Change-Id: I4afe678cae6556d16642d155ce770fbf4e61ad49
2012-08-10 19:02:15 +09:00
Tadashi G. Takaoka
79eefda0d3
Add SuggestInitializationListener to BinaryDictionary.resetMainDict()
...
Change-Id: I4c01f172ddb2ca60fa6e604384610c90b76e5457
2012-08-08 15:55:26 +09:00
Jean Chalard
e7c471a52f
Don't auto-correct when there are digits.
...
Bug: 6667462
Change-Id: I796655f57c71c9f50ae6e38dd08b71df3998dbcf
2012-07-28 00:15:54 +09:00
Tadashi G. Takaoka
369e54cc33
Add Suggest initialization finish listener
...
Bug: 6860204
Change-Id: I1e4c03c99415cd9bdea5a8556ff4093c33f0f508
2012-07-25 09:55:22 +09:00
Tom Ouyang
eea34598bf
Merging minimal gesture input
...
Change-Id: Iee6ae48bb6309c2867b5d2e344fe7d86dfabd654
2012-07-13 19:32:18 +09:00
Jean Chalard
1343d27de3
Readability improvement (A117)
...
Change-Id: I6f8bb05a23edb40a079da60b7136170ec9043282
2012-07-12 15:58:16 +09:00
Jean Chalard
24a63b5537
Simplification (A116)
...
Change-Id: I97cf92a7b0dabc251dd241b24978ea00d1e5f047
2012-07-12 15:58:16 +09:00
Jean Chalard
f5b55cb70c
Compute variables closer to where they are used (A115)
...
This improves locality, it's better for readability/performance
Change-Id: Ibb1efaf86e362dd2c9398722d0da2144df96b333
2012-07-12 15:58:09 +09:00
Jean Chalard
2549b4978e
Cleanup (A114)
...
Change-Id: I7e24e0aeae7c004cae310ae9f46cf90dac2d4d14
2012-07-12 15:09:57 +09:00
Jean Chalard
02f1c1534c
Cleanup (A113)
...
If not composing a word, then consideredWord is always the empty
string.
Hence, it's never whitelisted, but it's also always "NotAWord",
so isWhitelistedOrNotAWord returns always true, so
allowsToBeAutoCorrected is always true. Which means that
isPrediction implies allowsToBeAutoCorrected == true.
Thus, !isPrediction && !allowsToBeAutoCorrected is strictly
equivalent to !allowsToBeAutocorrected.
Change-Id: I4ad7a7c3447851c539646d97cf55ff065e6ee115
2012-07-12 15:09:48 +09:00
Jean Chalard
ae13061245
Simplification (A112)
...
If we are not composing a word, that isFirstCharCapitalized
and isAllUpperCase are guaranteed to return false.
Change-Id: Ic4a0be9574acf4653c729a9594f963f5bcf0c757
2012-07-12 14:30:33 +09:00
Jean Chalard
d8afa2fbe1
Remove the ultimate code duplication (A111)
...
Change-Id: I7c76613df8f148feb02765f187db3ca6dc577977
2012-07-12 14:30:33 +09:00
Jean Chalard
3b57631b60
Resolve a TODO: bury some implementation detail in native (A110)
...
The fact that prediction does not accept a null argument is an
implementation detail, it should not be visible to Java code.
Change-Id: I3a156b323b6db9353de898d33f3f7c81751cecb1
2012-07-12 14:30:30 +09:00
Tadashi G. Takaoka
d82dcdc924
Add batch input dictionary lookup
...
Change-Id: I4da3c976838e8eb56c9ec80aafaaf54d759b7981
2012-07-10 20:01:28 +09:00
Jean Chalard
5e573a1f0a
Remove a useless parameter (A91A)
...
Change-Id: I1d1758048649ef337875a5141d825569af7ad38c
2012-07-10 19:31:36 +09:00
Jean Chalard
82009901ea
Add a consolidated method to the Dictionary interface (A85)
...
Change-Id: I5d79021e69cc738e3013e31764ab0a59e15decdf
2012-07-10 18:57:12 +09:00
Jean Chalard
c677b0071d
Enhance behavior consistency (A84)
...
Use the word the same way for suggestion and prediction. It makes
little logical sense that the trailing single quotes be removed
for suggestion lookup but not for prediction lookup.
Change-Id: I0de4b5f7c5b4c1b4ba1817ff9653d7c03967146d
2012-07-10 18:05:20 +09:00
Jean Chalard
1c6693a219
Refactoring for whitelist (A83)
...
Avoid special casing the whitelist dictionary by having it implement
the interface it pretends it implements
Change-Id: I8b873cb0f3fe13cefd32c8cb756a25c8ae16a2b4
2012-07-10 18:05:20 +09:00
Jean Chalard
fb6eeeb35a
Refactoring (A82)
...
The user history dictionary should be the one knowing it does not suggest words
beyond 2 characters, not Suggest.
Change-Id: Ie85ec6116eb495e0c7f51108e4620c5ae536f4bf
2012-07-10 18:05:20 +09:00
Jean Chalard
966efe4889
Fix a bug with suggestion behavior (A81)
...
Bug: 6788235
Change-Id: I5a4212872e0fd3f9e80168fd3abd5c2b3bc4110f
2012-07-10 18:05:19 +09:00
Jean Chalard
e9a86e2cdb
Search bigrams for the lower case version of the word (A46)
...
...if there aren't any for the exact case version.
Bug: 6752830
Change-Id: I2737148b01ba04a64febe009ceb2ef53c265d224
2012-07-04 20:12:58 +09:00
Jean Chalard
c5e911c06b
Consolidate a method inside another (A45)
...
It's simpler to check the safety net directly inside the
function that checks for auto-correction threshold.
This introduces one very slight change in behavior. The value
checked by the safety net is not any more the "typed word" but the
"considered word", the difference being any possibly appended
single quotes.
E.g. the user types "this'''" : the typed word is "this'''" but
the considered word is "this".
This change in behavior can be considered a bugfix.
Change-Id: Ia7ab4bc933183dfbd41bb00328e4c0b5ab76bc63
2012-07-04 11:51:51 +09:00
Jean Chalard
f72b8f5662
Move the safety net function to AutoCorrection (A44)
...
Change-Id: Iec791d061f237f60992dd6048c4a37b46f4cb9aa
2012-07-04 11:51:46 +09:00
Jean Chalard
4ca05e2474
Refactoring (A43)
...
Change-Id: Ib0b6f36999518096819ada2f19365767cb5f9931
2012-07-02 15:46:11 +09:00
Jean Chalard
7ad088a4cf
Remove useless code (A42)
...
If allowsAutoCorrected is false, there is no point in making
hasAutoCorrection true, since in the only place where we use
it again, it's &&'ed with allowsAutoCorrected !
Well that was extremely obscure, good thing refactoring allowed
to realize this was useless >.>
Change-Id: I34936d445f1ced17c7bd04a9524bf608f9e8b9c8
2012-07-02 15:46:08 +09:00
Jean Chalard
90d300c770
Clarify some code and fix a bug (A41)
...
The test against hasMainDictionary is a test to know if we should
auto-correct or not. Its result should be recorded in
hasAutoCorrection, not in allowsToBeAutoCorrected.
Actually, this value being inserted in allowsToBeAutoCorrected was
causing a bug that nobody noticed: when typing in a language with
no dictionary, the word in the middle of the suggestion strip would
always be bold, as if it was going to auto-correct to itself !
This change fixes this bug.
Change-Id: Ia1f08efd7089b9c5cbede910c5b0951d83e698d2
2012-07-02 15:46:03 +09:00
Jean Chalard
2631e3b195
Small refactoring (A39)
...
Change-Id: I3c45b5a6571f986acc7adb3a8fe17b210303f7ea
2012-07-02 15:45:58 +09:00
Jean Chalard
79f5317848
Match calls for future consolidation (A38)
...
Change-Id: I2b2ab99e801fa8b4b30eab16a8aefb8cfe104ba9
2012-07-02 15:45:54 +09:00
Jean Chalard
cd288620ea
Make the autocorrection scheme more straightforward (A37)
...
Change-Id: I4833ca7e057b8c1f1f22390673cbca0d2433b1bd
2012-07-02 15:45:34 +09:00
Jean Chalard
9011b89f4e
Remove cruft (A32)
...
Change-Id: I35c2ba4caf6be4ba0449e11c0597ae8e468c0e6e
2012-06-29 17:00:57 +09:00
Jean Chalard
2cda148fd5
Simplification (A31)
...
Change-Id: I9e4d030974ccec1a6256de6ca87610870e404149
2012-06-29 17:00:57 +09:00
Jean Chalard
deb2d88245
Small refactoring (A30)
...
Change-Id: I41b413986a3c5bb6697bb7bbced17ed1e361913c
2012-06-29 17:00:57 +09:00
Jean Chalard
0a63111821
Remove a useless parameter (A29)
...
Change-Id: I52625e707abf61da9b95e542f0814c66b532f483
2012-06-29 17:00:56 +09:00
Jean Chalard
9e0af57736
Optimization (A26)
...
Change-Id: I1d7790289635729645995fb8c38868259ab1b3be
2012-06-29 17:00:56 +09:00
Jean Chalard
7a94cbd2a4
Remove useless code (A25)
...
isWhitelistedOrNotAWord takes an 'ignoreCase' argument. By looking
at the contents of the wordcomposer here, there is only one case
where its output will be different : when the word is typed with a
capital, but the lower case version exists in the dictionary.
E.g. the user typed "This".
In this case, isWhitelistedOrNotAWord in line 235 will return false
instead of true, so the test will score a true instead of a false,
so hasAutoCorrection may be true instead of false in this specific
case and that's the only case where it's different.
But in this case, allowsToBeAutoCorrected is certain to be false,
which means the result will not have changed if hasAutoCorrection
was true in the first place. So in the end this change is sure not
to change the behavior.
Change-Id: Ic41cf959c20c19165f84d9b8ff006731fa595d84
2012-06-29 16:57:56 +09:00
Jean Chalard
b3cfde2cbb
Add a few comments for future reference (A24)
...
Change-Id: Ia356130b8a95ec9cf676bc6be05d801c13f14b64
2012-06-29 15:45:27 +09:00
Jean Chalard
e398c6c024
Rename a method for readability (A23)
...
Change-Id: I6f569322e645d36bc82fddf4ec2fd621972e3b47
2012-06-29 15:45:24 +09:00
Jean Chalard
ea578f6b1d
Revert a test for readability (A22)
...
Change-Id: I1df4cef5ae2736a22273843dce67f0012181bfd3
2012-06-29 15:44:55 +09:00
Jean Chalard
19d02c19d0
Remove a useless variable (A21)
...
Change-Id: I901e6b0e2b994128da19d68233b9f68bb308cb95
2012-06-29 15:44:17 +09:00
Jean Chalard
4d5e7235c5
Remove a useless variable (A20)
...
Change-Id: Ifc37462f5243563693c8cd7cbeb401ff054daa52
2012-06-29 15:12:51 +09:00
Jean Chalard
739683dcfb
Rename a method for readability (A19)
...
Change-Id: I0b8c06d1fd0bfb3caf363c048acc7048abed1752
2012-06-29 15:12:51 +09:00
Jean Chalard
31b346aac6
Remove a useless test (A18)
...
allowsToBeAutoCorrected always returns false if the word is empty.
This is because the whitelist never contains an empty string,
and isValidWord returns false if the word is empty.
Change-Id: I34ecc2a1563aea6db5b2f12796f251f6598576a2
2012-06-29 15:12:51 +09:00
Jean Chalard
b01cdb975a
Inline a method (A17)
...
This will allow us to remove unnecessary processing
Change-Id: I251dfdaffb077906186686ebe65fd82e1e360bd2
2012-06-29 15:12:51 +09:00
Jean Chalard
a96a11949f
Inline a simple method (A15)
...
Change-Id: Ib74fcbf33c680bf02c39a9896e30e3afbcfd149a
2012-06-29 15:12:51 +09:00
Jean Chalard
074c90af98
Inline a method (A14)
...
The new code is worse than the old one, but this is a necessary
step to make things prettier.
Change-Id: If6e8a139bb85e6920c749743c78792a22a8acb45
2012-06-29 15:12:51 +09:00
Jean Chalard
f89a75134b
Small readability improvement (A10)
...
Change-Id: Iba326921711e1c4eab38264e66b6b44a64fec398
2012-06-29 15:05:08 +09:00
Jean Chalard
5110e2cb51
Optimization (A8)
...
Change-Id: I2b9e8cc6a13fd9af84a5189e4d3fbb2b05c68d46
2012-06-29 12:54:11 +09:00
Jean Chalard
4847a27f74
Cleanup (A7)
...
Change-Id: Iba97e0062b702c005ab3ff9ce59f181d19ab7c98
2012-06-28 19:13:16 +09:00
Jean Chalard
ed83d4b143
Stop special-casing a single suggestion (A6)
...
Treat it like the others
Change-Id: Ic24e40ada0e75773c3ece9470ab61c350697be5d
2012-06-28 19:12:37 +09:00
Jean Chalard
251bb70f08
Cleanup (A5)
...
Change-Id: I06134145b47c46bbc6c340ca539f34a01e2ca163
2012-06-28 19:12:37 +09:00
Jean Chalard
4c4e3a0949
Transform the whitelist suggestion like the others (A4)
...
...instead of having a different code path
Change-Id: Icd177e2151e45d25300000d4b63d4fba1f52b6a8
2012-06-28 19:10:32 +09:00
Jean Chalard
33b3805e79
Small refactoring (A3)
...
This will help make upcoming changes clearer
Change-Id: Ida8d4935f7315e5da6007ad364124694da3112d0
2012-06-28 19:10:24 +09:00
Jean Chalard
b7cdafd78a
Don't pass everything to a function that needs only the head (A2)
...
Change-Id: Ic367836202ab8071c1a9a02eaf0651b0da947d51
2012-06-28 19:10:13 +09:00
Jean Chalard
2d2e348033
Use a TreeSet to sort suggestions instead of doing it by hand (A1)
...
Change-Id: I16ba39321107e87ad48a99c2410a15995a66f23c
2012-06-28 18:54:14 +09:00
Jean Chalard
10abf10c1f
Convert local members to local variables
...
Change-Id: I852787986c79502a4de7effe9c8281a4cf2d519d
2012-06-27 19:54:29 +09:00
Jean Chalard
3ecb2747b3
Optimization.
...
It's useless to do this for all suggestions including those
that will be ousted from the list.
Change-Id: I7bd63d783e21984a269e4b1ae17e9b9d8c0859e3
2012-06-27 18:55:43 +09:00
Jean Chalard
3705ef407b
Read the suggestion type from the suggestion
...
...instead of dirtily passing it from the dictionary loop
Change-Id: I92ddbd7451609b69f6d4dc31bf89d614423b2016
2012-06-27 18:18:35 +09:00
Jean Chalard
24eec0fa68
Remember the source dictionary for each suggestion.
...
Change-Id: I3c63372bd5572a479a67eaecfe8c8ea1cabc70d9
2012-06-27 18:17:28 +09:00
Jean Chalard
d8f0caa406
Move constants to a better place.
...
Change-Id: I5c27a3ed99b17f850e26a8503de16f001c7111c1
2012-06-27 18:08:08 +09:00
Jean Chalard
089c11a086
Cleanup
...
Change-Id: I575f22330bf6881af1d9a35f22b51b7bf2198113
2012-06-27 17:59:58 +09:00
Jean Chalard
b5afd3de0c
Remove unused stuff.
...
Change-Id: Ifd0d5b6978f76b841574a6e10157c32d0cd656b6
2012-06-27 17:44:16 +09:00
Jean Chalard
32ff2504a0
Update the prototype of onAddSuggestedWord - calling side.
...
We want to get rid of all those IDs in Latin IME.
Change-Id: Ibe08100a5e2976c80abb049889233b4047a686f3
2012-06-27 16:17:14 +09:00
Jean Chalard
56beb9e321
Use binarySearch instead of a hand-written linear search
...
Yay.
Change-Id: Icf686eb2d675da959f19edc856b521e6288dcea3
2012-06-27 14:17:29 +09:00
Jean Chalard
9da0027b38
Implement a comparator for SuggestedWordInfos.
...
Change-Id: Ic4b0ae05cd98a1aec5806c5e4b744158e73aea7a
2012-06-27 14:16:23 +09:00
Jean Chalard
4ef01c51f8
Merge "Remove some special casing"
2012-06-26 20:33:43 -07:00
Jean Chalard
7e49a2b6b8
Remove some special casing
...
This special casing is useless. If the word is the same as what
user typed, the scoring algorithm already ensures that it comes
out at the top. Actually, as is written in a comment here, code
executed later is actively relying on this suggestion having
the top score ! There is no need to test it for equalness and
inserting it at the top then.
Change-Id: I263a6de59b77ec72a2dcbb933361b8e16fca0681
2012-06-26 20:40:42 +09:00
Jean Chalard
a3f5f51ec4
Fix a bug where a log would mysteriously not work
...
Change-Id: I5ca77ed65e95a6d357215c0e730238fb463986bb
2012-06-26 20:36:51 +09:00
Jean Chalard
22657dcba0
Optimization.
...
We already had that computed
Change-Id: I2a9742eaee2e9db1f73aeddda7bae7e237b4d15c
2012-06-26 20:02:07 +09:00
Jean Chalard
ec8b27fe49
Cut out a method for clarity
...
Change-Id: I1dc668698a5cd840297e713a26a525f5e32d35d6
2012-06-26 19:49:01 +09:00
Jean Chalard
5953dc93cf
Avoid string conversions when possible.
...
Change-Id: Ibf5f3e40da55998364d0d835ecf283f32c80fcf5
2012-06-26 19:45:52 +09:00