super_hacker 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +28 -0
- data/LICENSE.txt +21 -0
- data/README.md +26 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/csv/download.csv +202 -0
- data/csv/faild.csv +12 -0
- data/csv/hax.csv +347 -0
- data/csv/init.csv +33 -0
- data/csv/log.csv +47 -0
- data/csv/menu.csv +5 -0
- data/csv/success.csv +10 -0
- data/exe/super_hacker +5 -0
- data/lib/code_generator.rb +52 -0
- data/lib/super_hacker/version.rb +3 -0
- data/lib/super_hacker.rb +101 -0
- data/super_hacker.gemspec +41 -0
- metadata +123 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1d5775533007f1571cf75053ecd5c114ab3a8e1fddb4c960b8626efa2d603bdf
|
4
|
+
data.tar.gz: e88f266e6e1f0c4d934891c6ff2379636b018ab9da526dc6ad16e4f93a509694
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c4d381d7ae09a78f7f7b97b42aed4e28b3d1b7707085afc45830281d7deb2d85c292bb29ec5671eb489061445b38efb7a1fa48aa8690b0cbf14070b2375f0912
|
7
|
+
data.tar.gz: ad8c901b43300474a62e9283a5a61325f6c006a3d35dddb0a29ac65c15a27cdecc3582cce01bda9fef29d991bc095107559fbb4c1cfa64ac65b8fa1f0fa7bdee
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
2
|
+
|
3
|
+
## Our Pledge
|
4
|
+
|
5
|
+
In the interest of fostering an open and welcoming environment, we as
|
6
|
+
contributors and maintainers pledge to making participation in our project and
|
7
|
+
our community a harassment-free experience for everyone, regardless of age, body
|
8
|
+
size, disability, ethnicity, gender identity and expression, level of experience,
|
9
|
+
nationality, personal appearance, race, religion, or sexual identity and
|
10
|
+
orientation.
|
11
|
+
|
12
|
+
## Our Standards
|
13
|
+
|
14
|
+
Examples of behavior that contributes to creating a positive environment
|
15
|
+
include:
|
16
|
+
|
17
|
+
* Using welcoming and inclusive language
|
18
|
+
* Being respectful of differing viewpoints and experiences
|
19
|
+
* Gracefully accepting constructive criticism
|
20
|
+
* Focusing on what is best for the community
|
21
|
+
* Showing empathy towards other community members
|
22
|
+
|
23
|
+
Examples of unacceptable behavior by participants include:
|
24
|
+
|
25
|
+
* The use of sexualized language or imagery and unwelcome sexual attention or
|
26
|
+
advances
|
27
|
+
* Trolling, insulting/derogatory comments, and personal or political attacks
|
28
|
+
* Public or private harassment
|
29
|
+
* Publishing others' private information, such as a physical or electronic
|
30
|
+
address, without explicit permission
|
31
|
+
* Other conduct which could reasonably be considered inappropriate in a
|
32
|
+
professional setting
|
33
|
+
|
34
|
+
## Our Responsibilities
|
35
|
+
|
36
|
+
Project maintainers are responsible for clarifying the standards of acceptable
|
37
|
+
behavior and are expected to take appropriate and fair corrective action in
|
38
|
+
response to any instances of unacceptable behavior.
|
39
|
+
|
40
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
41
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
42
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
43
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
44
|
+
threatening, offensive, or harmful.
|
45
|
+
|
46
|
+
## Scope
|
47
|
+
|
48
|
+
This Code of Conduct applies both within project spaces and in public spaces
|
49
|
+
when an individual is representing the project or its community. Examples of
|
50
|
+
representing a project or community include using an official project e-mail
|
51
|
+
address, posting via an official social media account, or acting as an appointed
|
52
|
+
representative at an online or offline event. Representation of a project may be
|
53
|
+
further defined and clarified by project maintainers.
|
54
|
+
|
55
|
+
## Enforcement
|
56
|
+
|
57
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
58
|
+
reported by contacting the project team at fuse.kanrinin@gmail.com. All
|
59
|
+
complaints will be reviewed and investigated and will result in a response that
|
60
|
+
is deemed necessary and appropriate to the circumstances. The project team is
|
61
|
+
obligated to maintain confidentiality with regard to the reporter of an incident.
|
62
|
+
Further details of specific enforcement policies may be posted separately.
|
63
|
+
|
64
|
+
Project maintainers who do not follow or enforce the Code of Conduct in good
|
65
|
+
faith may face temporary or permanent repercussions as determined by other
|
66
|
+
members of the project's leadership.
|
67
|
+
|
68
|
+
## Attribution
|
69
|
+
|
70
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
71
|
+
available at [http://contributor-covenant.org/version/1/4][version]
|
72
|
+
|
73
|
+
[homepage]: http://contributor-covenant.org
|
74
|
+
[version]: http://contributor-covenant.org/version/1/4/
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
super_hacker (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
mini_portile2 (2.3.0)
|
10
|
+
minitest (5.11.3)
|
11
|
+
nokogiri (1.8.4-x86-mingw32)
|
12
|
+
mini_portile2 (~> 2.3.0)
|
13
|
+
rake (10.5.0)
|
14
|
+
thor (0.20.0)
|
15
|
+
|
16
|
+
PLATFORMS
|
17
|
+
x86-mingw32
|
18
|
+
|
19
|
+
DEPENDENCIES
|
20
|
+
bundler (~> 1.16)
|
21
|
+
minitest (~> 5.0)
|
22
|
+
nokogiri
|
23
|
+
rake (~> 10.0)
|
24
|
+
super_hacker!
|
25
|
+
thor
|
26
|
+
|
27
|
+
BUNDLED WITH
|
28
|
+
1.16.4
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2018 kouta
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# SuperHacker
|
2
|
+
このgemはスーパーハカーになりきれるお遊びgemです。仕事の息抜きに使ってください。
|
3
|
+
|
4
|
+
## Installation
|
5
|
+
|
6
|
+
Add this line to your application's Gemfile:
|
7
|
+
|
8
|
+
```ruby
|
9
|
+
gem 'super_hacker'
|
10
|
+
```
|
11
|
+
|
12
|
+
And then execute:
|
13
|
+
|
14
|
+
$ bundle
|
15
|
+
|
16
|
+
Or install it yourself as:
|
17
|
+
|
18
|
+
$ gem install super_hacker
|
19
|
+
|
20
|
+
## License
|
21
|
+
|
22
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
23
|
+
|
24
|
+
## Code of Conduct
|
25
|
+
|
26
|
+
Everyone interacting in the SuperHacker project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/koutakun/super_hacker/blob/master/CODE_OF_CONDUCT.md).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "super_hacker"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/csv/download.csv
ADDED
@@ -0,0 +1,202 @@
|
|
1
|
+
text
|
2
|
+
WVMKZUBFHW_CPJBZFAPYYAEMVPEJHLCTYWCXPXBCNWAHMBDZERDPZVTWEHKUVFWFKBVSDBNYTUDTUTYCMLDQHSCYPE
|
3
|
+
BTTFWAXUTURXDATN__XURXYDTDRMULSZLMWMBXRRQNMWTGYL_JWZYHYYPRTHUZNJJQFFLWRJGAXWGQEJAHDFBHEZGP
|
4
|
+
DZMVBDXYMKEGAGYCVHPULYAFHR_DDDHNTBZGUNYRBBPXK_BNAADDNGLPGXPKAFAJ_NWTKDN_YFXKHQSGUULYMUPYBW
|
5
|
+
CNWMEYEMRFETFKHJEWHGHWAFMWRCKFKVCRBLUWUQBGMZLTWDFBXZLQQHTKARBPSTTLGFUSPBTFWFMEQMHXFEJCPLRF
|
6
|
+
VBGHXWBDCLYHKTGVBLXYRAWQKZALXYDJACZHPUAGMXZWNTTCNQFAURTDCTZRZZBPHV_SKPQTHFWHHSRUV_LLYVGPTS
|
7
|
+
ZHRJBYYTMXDSHDDUXFYMPVTQGSYDDXKEEXNTYPUSN_FPWLJNGABYRHXDMK_NVWYXGGNVHHPM_JPCHNHYAZWPGENUKE
|
8
|
+
W_UQXPFPZXSLJCUTYEXKFUBEYDWKUYTTXLNESTPGTPUR_DNLXKCDXHTJCRNKC__PKRNMRLQHAQFDTHRDAKJTVKHC_F
|
9
|
+
LCYPG_MTJM_FMPHZXSAKGXVHFESANFTETCGNLTLXFCGKRJNDCTQJMELS_YCHLXPERFKRSNBQUTAWZQVPSXMTWVBLZN
|
10
|
+
NZHCZR_JHWVSULTNKXDGLFAFEFSYNQTFJTTYJXTYAKJPWUJDBFKJBQWYEVF_XTTMSULCJUBHAK_XJGYFN_LNMNUQJM
|
11
|
+
HRUHNQYZGYQJWZEBJAVCAPDFJHHQAEWAPRQ_CVTXXQEQMPCBDCCNVWUUFTTNXYPSPDUMFNPWVQVXTWWWDFCUYTNHLJ
|
12
|
+
MNUULQMATFVQCXBPCKZLWBYFQHAPLMPJMNKWLQSGEGZHEEXED_WLRWVXKWFKNAALSUAFTEMXGNVYVDTXZZEVTDKLXJ
|
13
|
+
CMFK_YUE_NELANFXCWPMRZ_ZSUPGLPJJTJTZ_VETSNYTVNYPEDJVYBZYXXS_DTBFXJFV_XLXYGXBNCEWQ_FXFXNLHB
|
14
|
+
LDYBWPVSKLBCNKQAWNCUGRVHSSRDCUUMNWPPTKYMUXULBLZFDY_KFECZAMFVYEGB_YTMXYWHZHRKPLQWDRGJDHFUEU
|
15
|
+
CTWTCJHJDUTZRBPQWAYQUJCYM_QLAFQWLNNKTPDNZADLLC_EXNJG_QXLATQVFXRVZQT_T_JWRVFFDKNYYHYYGSJTR_
|
16
|
+
AYDKCTUQJ_NCJUCMTWKNGFAPVQDBEHRSQKFNXFFDYHJLDRVDBDWWEBNMLNSUR_YNDHZSJXTYYEBFJRLRTJPHEMBZU_
|
17
|
+
MNMCXSMGCCJEVQJTMKZSW_F_XQ_QJTUAEKEKKJPS_CCSQVFPCREJXHYSEXKUJFKZJWLZFAHJJRAZWTJMFZDQWEQPDA
|
18
|
+
ETVYBKNSALGEUKRUUHQGZ_RTJAJFTBFFPTVWWBYLYLNVTQC_SP_RRMSWFPQLELGATDKMTKFFSMKMSSYBVPNTBCLLJK
|
19
|
+
CKCTJARCFCUMDSLVGHTMCVHRHHHRDTVZUSEKAWRABVSDSSWQDKCZUAGXEJPAMJFYKTNPSVCJWWTMLNHRFSCUBDUNQL
|
20
|
+
MQ_CZYWYSL_THXBRCZXFBZMDRZKSXSXRJDYXVVGSX_BSVLBPJQCKZUAXXHDXRRDRQZUZYFB_KNHSPJPSLJXYPYHKWR
|
21
|
+
_WMQEFWECWQZANDFVEMSTTXSGDHDAKYPWURFRXRJWEVLAXTCYEFSFVNKFTFEFCMQSHDMVUAUYHQFFPARBHDMEQDMBT
|
22
|
+
VLWJAUWJXZEBAYTVSKQB_SWVYSHACHVZHMBMDVRWZGBNPWHSRAURTJCUMK_QPCCJDKMKFWSVNJSBDGWWBULGDGWCY_
|
23
|
+
SDPGSD_WKDGDNZLHEJTWEVT_JCEHMRFLVAGGYVUUJC_JXYVWQUWHKYKXJKKYFXLLKHSMSACZJWBXGKDTHGNPPUZCBT
|
24
|
+
RFGFGSFVCG_FJLCTHTETGSSMMQTZXBESGNCTHRKEALPQNGVZYTWPKDBSJPTMDXRAAGHBUXLNBN_TMTWWLTCYCRDR_T
|
25
|
+
LZQAXDZUPLPCFBKQBWJKUT_PMFH_LFUAYWMYZZFLSJGVJYQEYTWYPUDBVZUBEUFFRHVGPHWQHLGJQFLEVEXVTHCKEU
|
26
|
+
HKRAKKECNUBRXUGKRGWLUFZAJG_UJR_ZCNKLSQKDSGJDJPULFHNWRDLWCXXLXDKALUKRHRLEKUPKBFDMVYN_ZPJYVW
|
27
|
+
PSTNMJLAUZJKG_YL_DXUWKAYBYLSMREBWA_LVHHQLWLPVTGMRAYHHCVYHBSKLJNBLVQPLJXJTUWWPVAQWZDSPVBGMK
|
28
|
+
XPVYULHHYVPUCMHGJNCYAGXPKSSAGZSFPCCVMFGAL_KYGTSNSRDYQRGWWWQZJRCUBCUXLDMAPTVQ_JLRJGXAHVJYS_
|
29
|
+
HDATVPVBNWQGSHBQFVZLNCFVJUYKFUDXBYZXAPJHKY_T_XSUGHNUDTSAFUTGMYLD_BZFJMQXWPEZJCQUNCYNNFFDJG
|
30
|
+
RXXSCWTEJEVSJADNH_WH_VEFN_LCZZMBEVTVNRVJBXB_CVQSVEGLGA_VJHMXDSFBELSRSQHEEDBHMRLBWWBSVTPDDS
|
31
|
+
MBBWHHVPYPYHEV_JAWMLVFFQDWVYKPGYBJRGGJXUUWKXENKQDNRSQKFQAD_GJPHKXEETAPU_QZYFJYKXVHATYRTHDX
|
32
|
+
TRNCMKPKVVEMPKMHBCBRGJGXCHNTGELNBCPSZXTEXJMYNPVLMTNABYEXDDKJSCWTFPQLSKPPQKETJFYHBUJABUGRXD
|
33
|
+
VACKGWLETCDWF_UJEQG_RNZBU_AZVNUDESEWNAERSN_AG_NXNYATJNEYHGVQQT_HQPMDNJDJKTBBLTE_JWVCYH_XYX
|
34
|
+
SLNUSSYDKUQBFCRDR_VBFQAZ_PFXSBWKAJMGGVYJMKCZPDMHCQEVJXFDDGCLSEBGSEFPTMNMKQGCHK_DT_WZGJJ_FN
|
35
|
+
VQSACUKPHMHYLMLYRMTBUGUDK_KHRAGPLW_PTERZA_LZEMZQRZPNLUTFKRRUWDUVVEJM_YYQMJNKKBCRNLKSDWEZQG
|
36
|
+
BPXQ_ZJMMPTJLCPLYVQULVXZZKFDQLDUDQJRBDVAHFBXUMDDWBFXADEFALNYLSSEMNRSDBCPCEFCHXJWVQEAMSRCYR
|
37
|
+
ANRWUMYVQNHWAXADRMFBPSEPPDEG_HGLJDPTWJZNUCKRUMQG_LVNXGNYWDRXWHMRBBMSGTUEMPVFJ_SFDDFSLBPNMH
|
38
|
+
YASMHPJGJUXHNPELFTHXPAQNJWQ_EHUBPLRDGNGMARKLCBXRADVHDXSWKMSWEWCNBAW_DSJGDHVJGSLLWAA_LARWQE
|
39
|
+
CFAYSLCCQSHYZMEXHKKHNVTEPVHGDFCQGYAGJYKVYHDNPSUYHDCNBJPFGEHMFRSHXVV_EXCVFNHPLYHCCADQHJAKPB
|
40
|
+
UKYELHRHHFZNEKFJ_GW_XGEYZGSEW_GUAHRKVWZPXBLEXPUKEDKQHXRNVYUGHESQGZQPGJVUTVSCHQGCVWPPQVDNTV
|
41
|
+
UEPTGYTJNSFRDGXAZFMRYNVXXYSJ_JNHPAWLSPDTKWZVGPJFXLCZKLJEKQGFRC_AGQMBCJKRVDKVFUQNXKTVJSVP_P
|
42
|
+
CACXHATH_YGQJZEVBTB_LHGX_GRVVVQEPXL_ZPBXWKSMYEPBDPQCASHBBXAGARSAAYSFNLRGMYHFDKJNGRRUTJ_ZCM
|
43
|
+
VWMTJHQQUM_PUXPL_MAXKTNTZMQEYUASYTY_VFQYEMJASBAENBUBNLPTPQUBVPDGVQCMM_VLMFGWWHEMEG_NVHLBQS
|
44
|
+
VJZYM___FGKNWKNCWRWHGDYSQUTBYSAHVDRXNRGMASJYNHNZFKZVNPDXCMZABLNPDMGNTBPQBFEPCBCRX_NFQBEHHN
|
45
|
+
VHYPAZMQJEUCLEVHBDCCVXEXPQHZ_XTCSJ_KBBATUNGAMT_TPCYFQJVLDRVZZLRGXYWYHLHSXLFSDXFXZEGUC_MPRF
|
46
|
+
DA_KFXSSYWWCD_AUFVFKSGKFQYAVTZEMLGAVXELCWHY_XAFFANHVGECERXMLSL_UXGWYTJCBMKNFDEGDYEPMNUNNRT
|
47
|
+
CXVJDMWFNJFTERH_YMVVGAZKLYNDLNLKLSCRHUVL_ZMSHNMLMRHML_KFYDSNEADLCVAAM_ADR_XDTY_UGEHJKUDZMC
|
48
|
+
TWUMVRBRRBYEMFJEZJPZDUCUUCPMTTVKFHYXNMKQWJPHEACEQPULSFCTZELNTS_DTWGJVQXNRFS_X_CS_ZSEYHWUSM
|
49
|
+
NTEDRAVDNPF_WTQZPZFNUUPRLSKDBNNVELMPLKNAGSGFAEHKUGHS_RDMFM_L_GXATVUTQQDTLHHPACTYVLQACCLEBU
|
50
|
+
GFCTCBTBFNUNQAZVJNXSCALKCHTYLPLSWXJRWBQAYRVDDNFSLBABMFXDKGPYNNSXXZJQYZDTDUFMQXULVBSZQKEWGJ
|
51
|
+
KMEJASHSMCMBRUSWAHCZMMYXC_RQUPTRRKNFPSMWGZNCWJLQRSDUQBCTTZKJYPKLWEHHQWJPRRRZE_XRDWGBSZKBBT
|
52
|
+
AJMPFGNRAKEZFTFVECMLEGQU_ESVFWKXPRVQXPKAPJBWYQYNUAMTTAJYM_UCDFJSNZNE_JXP_UKQPSCFXUSHPF_YFJ
|
53
|
+
KDEBYUWCTVMGMFHKJWZUMSKSNELXCL_BKKQE_XWEZSQEWJNELXCUGZTQUMGSDHCSQUGLXEVQVY_DF_NVLVXDDUSWRN
|
54
|
+
MNYWE__NWCENJEUHNBHJWRATNETKTUUQABRBTTTGLMJGLLGWCRLDWPPXFJFAHCBMUSVQMNTVQAUGNF_FPCMUXCXRWZ
|
55
|
+
NUUARETHSYDGVUPVCDVZREXBTJZGTPLWPZHVAUAKKUMTRENHCVUETUZKRYGX_N_GQQTEZCJWYVZQGGPTFHHRUDXYVH
|
56
|
+
JPMMAWWMXNNDYPF_VRMJNNHCRXYREKGWYCXWMRRNAPMYMB__PGBKJKTLNXSKCHKKHVWY_LFGGVBLRKAPDTGENTPWFY
|
57
|
+
SYPSDUCSJFHADFGWFPZE_HGWDLABPMEVKN_XXLXBNFHVAHJACXQGPSFAQFGRUBWSQQPQDAWCFDLFCLCDYNVCKSKZCR
|
58
|
+
RK_XNHXPLRRUKGMXZVAXARDQTXQH_NRWUHH_SQPCXUVQG_PTDSNXSLFYGP_UKTFUVH_DTTMTLLKQDMSFYVMJDTPWFK
|
59
|
+
CXYEYZJCMLGRVMMAJBNJXZVCLKVZTAJRQZULLTZBBQQDKMRJXNLSZDRTYZMKHQUHTLCD_BTTNSTCVGXRFSZRZLTDAN
|
60
|
+
VCXBKRDXTFZSLJENXNSXPMUJKSLNPFXZCALPRDPCXLRDSMLYEQBBSSLCAPNUVKEDMPFBAUAPGGWJHXDDCSEANAUDVG
|
61
|
+
VYCPZWCMZZHL_QLGYEHBXJCFUGQMGSJNNPMEBMGLCFGPWJUF_LXBZPLT_AHQCQKSEWUAECDCBGDFDFVMAWQLD_AHLX
|
62
|
+
LYNVZEHVARFGRBEJYFZ_GRFLBBQGHTXWVNFPDBF_JGPYUCNQSRCWDKXFVVVPFXPTKCSSXENBCTPJZURQHKYSRZWTKA
|
63
|
+
FGKNFUXWNUBUDZUMVKMYDPMQWLFQFEUB_SEXUWSHMEXBPMGTYGETGJDDPSLPCRXNCGZ_EVYJTC__FUWYQUQSZNA_AN
|
64
|
+
AG_NTMQCMJRFLASGPUBMJYUGKRGSQBUDLBLDMKLLGFUQVRCVYTUGJXSC_QEULBKGYVUW_HFRB_STUMA_SCEBGPCPXZ
|
65
|
+
VRVYE_CEJSNPWVMKTNBXJWCBUJQPQBZTSHGZCKVFQFSJRWPWMD_DUQPNAJAZTTE_ZBMCMCPDAXUNPUPLBTSKGCFGLL
|
66
|
+
VNKEWUNRCLPUNLDRHYGHVGDVMUXFACTCXYMLVTJQXXNARFXC_RQZPGNYDXADUYRKDCWWJKYVWDHTSGYZLPHZZJE_CK
|
67
|
+
CHKZHXYREQLJEWUJBSFVPZYZH_CFMEGLTTTFKSXKNHSTPVQZHHRBV_SAUVKJEEWZYUVTNZTFPHPUNXBBRBZBCVDFAG
|
68
|
+
KSWXMJSDKXENLAQEFWRGSGJDSLWDTKQVKKG_QTTURFXDPJCLAHVBKVNAXZLAPBFXTTVXERUGUV_PNWNYEXVGYFXXNC
|
69
|
+
JPAFU_JMJREGLVLVXHGG_M_ZMYXFFFUCYHVNTYGQVLVGGMUJYUPCERBFZKEPVVBFGSCNU_DWCRYUKUZHADFUKFFQLL
|
70
|
+
NM_JJJJXEV_CFZASCJLZZXTJ_NDFLYHBBAZVHXQRADYQZKQVWBEJJWHVS_RHKPSNJGUSBBCQRGHNWLXTFPCKND_FUF
|
71
|
+
GWAH_JBZHJTREL_MUPRNUEATBWWJPW_RGLXMMUH_AUTMQUAQKPEPYCJBQSHKMQTCLFECLRUBYAMXZVFHR_RAUWDNMA
|
72
|
+
KZMLTJRGVKMH_HPRSF_MXMVHQAUDBNY_NPERNHWXFNLUGQTBNRAUKSMSPLQELZWGWZXYGNMGAAKHYRRQGEAD_CNBBW
|
73
|
+
RZYGCAZMQT_BZWMQHLHRYDGHHHTVDQMNHCNLNDCMTFPAWZTJUGVJCJJUHEQJQCDDXFXZ_XHVGSEVLFDDFWXUFTZJJC
|
74
|
+
_ZSBKYYC__F_YJ_GBSJMCLUVHUMCEVQDQYCTXAQUMF_JFUHLELVWXPWNURZFBCLVEEWRSMBQ_DMVJAQS_GQBGMTM_Z
|
75
|
+
CFMXRXEXQLYSAXCWKMPJUU_ULUC_EGZNQUEHSJZPDUABRTWCJRCYDRUUYKNDNHGZ_VWJYBTKLRJSVFFTSRFVLKMQAW
|
76
|
+
BVZZNDF_WHWTUGCETMTFLEQUQYVFYRFLTFKEAGPVGHCBRTQKEWH_HXCAECTK_LASSHSPPTDFUXYRWUEEVYXSHGYRRE
|
77
|
+
KYZQFD_HYMEQSGEACYVMRGPXWZSWYTJC_SVCQLASPLMJEXLHJWYXXL_DPWJBKRFGS_QS_DU_JZQSBVHMDLDACWUSKD
|
78
|
+
WTDNFRCV_CMSYEGKQMCYWKFPPTHKFVTFUWMHNGEYKAKQYACKDR_JFHJ_KKWCBPFUUTGGMT_ESNNHRQCXWCR_FEVXLM
|
79
|
+
NHDQAGWDWWCMWBJYHNCCLRHKZCXVDBFCWKFAJZVJVTWPUKHZDAAYKRVHVGSPMZDJTTEMWKQGTTVDFTASTFVPSRQMW_
|
80
|
+
LHNKLPGCSSJJPMAWKFYNHZEZYFETZBYCGBRYEFAYLLSGHHMSAMWFRM_BUJGFTTHXKXXCPJRJNEMPABQHXXVHXQXKPC
|
81
|
+
BKKNLMANCJZZJDLTBVECJWEYZJSSWJTQMNLTLNABXMUELHLUYXGVLTKEMBFCJ_PWHTJCDWVCQ_HPJKFLLURWPGXV_H
|
82
|
+
SZDSL__GFFJLWZNJVWTZDVQKZFUZJBM_ZDZBYDKWKHUMNLQMEAAEZGECQPMNGBFECMCDSTDTWXRKNVTNKFGDMVSHGX
|
83
|
+
VFPMHXMZJDHKMFPJKPSDKSSAGXHMMMZCGTEETXUETM_J_MCCJPBBYRSEVBSL_MJ_ABTPSUEZHYVKJPBLWBANGWBDSZ
|
84
|
+
MGNPRJRPZUERZRLQ_LXVFH_PBCACDBKL_YCCSBTQAGNBHMGEKDTBAXQLTTGNGCVSHBXLNMWASRPTUYFAWWJCCNAFKK
|
85
|
+
QNTPHQFUBAQEECHWSBLBUKLKKFHYKXFNWDSRKCTPMKWRAUZCNMMSRMVRZTBWBDYNEVVGBHZKBUPWFZUUKJCND_TRBS
|
86
|
+
ALZNELXPVZEDELFQTYTEKUMHGTHGHHTTSQLWVKDQFAPFTSUDFZWNWXTNTN_QEGDBB_YHXVDAUJRAXXMPCMRVAQNMPR
|
87
|
+
QQFWNJZPKTSLPQTPPGL_JDVGZQP_DNNNATRBZWSGBTEHSBQDDXPYGFXYSFHZWLPUQNDLYMSFHCLGDJFRSQJZLAASWV
|
88
|
+
RHUXBSZHXZAKRSWVCUUHXQLUBGJCYZJMTALBQEFQEJDCFTSGYRCK_HCLYJNHXDERRNHD_HDNBUXGP_ZVZYUUTPBRBH
|
89
|
+
SRDFBFR_WRDMYNXYLVHSGFBGNKGECJBDLUYSGKGW_YNGVBEPXCJTQQE_RXAUMAUGCXATFRHFHRMB_CJWPLFMBFKNGT
|
90
|
+
ENGCVCKVUPFLEMVX_ZDY_BFA_FJQKWKPT__L_XLMSTYGEYEXEMSQAUKZDQVXLTJDNXNBWDVVVZVXUJUZYCDB_KSHQK
|
91
|
+
ZZPVWXTCGJZCQVKXNEPYQDKDQWYDEDYNFLRGGAJQYKUJWFASGJLXCDVKESX_VDSMVWLUUCPFZMK_YKCX_QBQ_WZFTL
|
92
|
+
XMVMXPMDQPQJLEAHEEWKNDQ_AHXFXUFJ_REVSCADMECKVRKZXECRFUYDAHUWVANKTDAH_CMFEJBLZBLSGVHZRSWXKZ
|
93
|
+
KTKJBUCGLZTWUGMXRDMM_HSEBQVAENRWBTY_QMQPRRJBCRLMRNUQLTPMWEVBTPK_NLTN_SVHQMRKMKFJQBNXMZFGCK
|
94
|
+
TSRVMFZKEYAPXNBMRRANCPZAQH_BWZQJSJSTBKU_HCNPHVWZKWWSTDYFAJMVXLLJPUKRGWWQTJVMWQDDHEBPAFZQQL
|
95
|
+
EBRDTYAUAPYYUNHAKRQQECJMRAWWLNENMFRSWYBUTKDNVYGHJABHBJNP_VJLATCNPEMTKRP_ETWSDWUDBUWVZ_GF_X
|
96
|
+
QQLDYTACHNSMRWZQSGX_AEVAYSTSPKDRBAXK_QWCWTSPHYQFVVKV_EHVNHYTFFVLCYNVHJZPAS_LJQ_PMBVAQZWX_C
|
97
|
+
EJQ_SBDQCKMHAJCJBDVCKZBFAWGDSKABZC_TPXFNNNWE_YTGDWSZQKCUSLHMHFKNMFPGYFGQ_DDLVXVHXEFAT_UCJW
|
98
|
+
PV_PY_DCJYECFU_DHZXPBVKYKFHDCKEURLZBTMSAEVUBMVFTNPRLBZFCXHCUGZXCUPJYYNTWDTLTVWQDMFFDTYUAMQ
|
99
|
+
QFCYCZZZHXPYYVQLWJSTEBDHXMPB_KXBBRNKPXAMZDXFLLCYFVFVAHQPCXPZMWSUXFRURWRAVZCYKSV_HALNJPAFTB
|
100
|
+
JRJWDZCTTDXRKNTHGAKVGGJRYJAYKVPHJEJV_TDRSZJSBYJLMWQWPEKREEZXZRGGFDBXSAXBDFLFRHKYQAWTHNRFEB
|
101
|
+
PFHUMBVYHSKD_FWMPGMQZ_HPUVWX_AQYZRPBFRDWRRXALVSERUMRYYGEGGRSZCDAPZXAWGLXRQDQGKRTHEJAREWZTX
|
102
|
+
XKJM_NEFFNRXCJZWK_CTPYT_UUABVZYKBTTNZJSKKFWRCJYFBESWBFGARCSYAA_VYNHVMKWVKMUCCRHC_ZGFXMXYJR
|
103
|
+
ZQWFHUHJVUGGDHYEZMVVRBAPCSHYKJ_EBCASYYHDTZXVYLGPKBKBDQXXPGUJZNUKQYCNFWPCHXDLMQKUHEDK_JVZPF
|
104
|
+
VFEKDTFTADEGLUTU_UPVLFPLZZSTADHSBW_ZLFTWZMVJZRXNUFPQCKFYYHNTHTAARTBNVETZVQUCDS_YPFVW_SX_HX
|
105
|
+
GEB_DVKSHXZQSVPLZWBKCZXRUGJSKKFTTNXX_YYTWNKHWUMWTTQXREULHUZFZGRYNJDDYED_UXXBDPDP_NULKQDBYF
|
106
|
+
MHNCGNCFS_UMTRTJTNRJKQPGW_NAKKXKTUJDVPZVACYWBJCMLLDBVWRGYMUNAVPCW_EX_XGDVKKWBAGBBLZQJRXBGL
|
107
|
+
WDLXLRXLGD_DUYWDDHVLZDTDNLZUYHFEDMQENGMBDFPNQEGQSKGE_CCCDVDLYEYXFULKFFFRGJQPDGPBEKWMNRANEH
|
108
|
+
TTWMFZZWUSVSSXMNNRPGHUJJH_VS__KJAYUAA_MPKUDWFLELZZGSBVZYTDAMRYJQCFWFLNRB_QLXXZK_LUEPZXUTXY
|
109
|
+
WKLJBPYSLMCKFMAGQDLUMWYCFVJPYXM_EYHMJDT_UW_DUKTKASZSZFYCUDAUQKFESKGBNKKCQYYYGEYFESKKSLCRM_
|
110
|
+
ZBMPFPX_YXZZHHZPMBEQRDCPQDJXQEVCAJZVPSULFNWYHDGYAYRJEGCDQXFFVTHGTARGCEAWGEZLEZWKWVQERKBU_M
|
111
|
+
FGRGDPRRMKNFVKYSHQKBUXKDQTPKKZXUKKYWWTVAZDMZEEHLBBGXEXUGDUPXCEUUJ_JUSCDECSACWY_UQCGJAAETYQ
|
112
|
+
BAV_ZBNRHEZXSJRCHUTJLC_FXNNGATNQS_S_CBGZAASPPSUHJAEKWRQGPHCREBTTVJMNEBQNGWTUZNBHZVPEAUPGHJ
|
113
|
+
UTQC_QXCUDKEWEBLAUJAJVFVBEDYJHJLCPYW_FEZKSUHAPGGZTUQHPXEJLQJNWFLYEGTELUNAGRSGXNQMXAFCUUBXD
|
114
|
+
YDEGCHXYLEZWCQRTWUP_ZQ_UXBCEZZRHPJDPTKSAJYPUFASZPHWDMTVUU_CGTLHCWEFVGSQCD_HKZK_AEHNELMYDXX
|
115
|
+
AFXAGLYLPU_RGEWKJACRTZUSXYETVPYFAXBTJCSXAZTUDAEZWRVFBZBULBWLRGTQZQUZFSQBVUDVTRHFAGFRQYBAWE
|
116
|
+
AUCUREHZYKSK__QTCVXRPBEDDDMFFKTB_TWNGCPQFDPVSXNYJMZYCWRFQR_JLLNFCAMHSFDNHNJYGKLDRXRLVLCSYK
|
117
|
+
_FCQSAMZLTNFLYJGSSASUNBBVYLKKVWHYPPCAQPUDAJRMEUSLCBQDKYBCWCCURFLNFPBUNXLZQNWBQE_UNFECLRBSG
|
118
|
+
YKZMAUXGHBJLVJSGDZGFQKLVMFALFSHCHKETAJXUQXBHJMRQABJHPTPPSVXHDNWGLPJMSYMCD_RKJCSYBB_CYNLJAD
|
119
|
+
CH_VFZJCHARL_NMBDGH_FAEXF_RZLTZQTXLPQZBQQTVJHQTGNJPWKKSFQENAUGNNEXKFAGWSZLNZJHZGYJMKQFNYRR
|
120
|
+
PPNXKSNPQPFQNELDQD_DTNVPWXUHXQEQGJXTHGLAKMFCCSGTMKTKWZZWBVABAGQHLQBAATKEFFRALVHNAFJTJAFFYJ
|
121
|
+
JZTTWLQDPQYWZFYAEWEHFUZUWYYFCXQGKAWCSNJYQCVVZMRCSXLDME_V_BLUW_UWHHMRNFJJCTQZXGFABVJWPCRB_T
|
122
|
+
YXAHCSXZTYPT_XMKQMBVRDJHYYPEG_HCKKBXBVMEATLRSR_GPYJZWBNXUDUSLKCHURKTUGQLEKDGABGCG_KH_VTTLJ
|
123
|
+
HTFAFRZUQMWZZSKPRKSRYNXCEYDGFQGYPWLWPFGPBQRD_LTMPHNQMGGXTMZBMAELQRQFWZKK_KFGRUMYTLJASSLPLG
|
124
|
+
ZLLGSRJMGYBLYWP_QKW_DPPDKNWUXWCGCDLXXKMMCTNMBKEVYRLJMNUJDKQGFUJDTZLPBFHUWCYGWVWEWUBJKAGYQM
|
125
|
+
TMMRNNMZQHT_UMDXFNAQPMBMFHXEXDGRHNSEPAFH_EMSEP_XHDCEJZXSLEMECEBQCGFRSNTBBSPQV_BQFRX_RVNXM_
|
126
|
+
EGNDQKHYTKPKUHFXWYXWYPCENNHNAFVFTAVGJRFLADAVXCVTQDJBUJMVCDBHCWYYXJKCS_LJJXJYBJLQAGWQDWUND_
|
127
|
+
AGTRDZBSYHCMDAMHDHB_VVDQZMWTCCMJRGGSJRGYLU_DXHL_NKYBRDNRCNKJM_MJWQJWQTEXRACS_ZGDGTTRKUPJEQ
|
128
|
+
XBLXPKTQCZEVBZCKSXBENADLWAVVRLKPKNNLVECWELVAYUHJLPZX_ZBZQCENNGP_TQULZGXCEHPYVUXAAFKDHVPCZZ
|
129
|
+
YGWLFHXPCTTNHNWTHBXXBTTCWRUQYDUPNMUPKZKNYVEPUUMWDSTDDEVXJYZDWZHWS_S_VUBBFHWGUYPEWRWLWBAUYT
|
130
|
+
NSXVBVAMMHCK_NNCHMFKFNJ_YYEVKNYF__WADVDSFPRFFHUBBPE_BBVXGXEVURVJJHNVMBVXT_TZYRBTRWSSTBBHSH
|
131
|
+
LNJPD_DNGRXQVWTFWUQL_JUVYDUFCZPRKFRVTCANTJEW_ANGKKJYXEKMWEQYRVYFBXFLADVPJWUZV_PAGNGEG_GEYU
|
132
|
+
PLNJBDDVGG_YAWPVJBZRJBSFCAGSHXJYXHCEH_RKSRUUGFGQFUQVHUHQWPXFXNLQWMPUREPNXMWUPBYKVSBZACPQJN
|
133
|
+
HUTBGWCCMRBALAQJTWSAHVJPQQGTSYVHHBS_VN_ALBFFEF_XEMWHTAGDNLSDWHDLMBJTDWUJVYMMJYVKNDYVWXNPDZ
|
134
|
+
_FKRMUQRBWFSJNSUCKPUXXFZAHZSNRPT_CDLSRWQHLUWVFTUM_VDUXSVZGANHRZADXFNFYBDFGJUUBJKWLXRTDNEUB
|
135
|
+
WEBAQPVCSSDSEBHPBJPM_TKXGFRYRDEXHMXQNJ_HLTQXFTWVLKTDJHVZQTNVAFMMUKZLJJYTMKSPTQYUGYAXUYCSKE
|
136
|
+
SZHCKJJCDTXSGCGWAKYWJUJBLZXZ_ZERVEAQRPHPVXGNZMZUPGWKJLCFCWHEKQHNPMQLPFLLWTRNKEKCWSUSBWNDRM
|
137
|
+
LWXSWLZXFWNSTWEEZSVAQYTVDFNYRBFSBUPPEBKGFQCCSF_UHEY_CZ_QYBXLCC_PVHSMWZNQLJABCFFKLMDXYYPMTQ
|
138
|
+
_DBYJRWPDHYDRPZRQKUURRUBYPZRY_XG_NP_NFLJWFTXZYDJTVWRGYYBBZQJSHUJQNXNANAMDTEAMPXMGD_AYRBBJZ
|
139
|
+
NKSGUQ_KLLKNZMUYFMNVUMGPZDEJLUGAERKUKT__BUVKVHFSYRFJ_DDLLMWAJGUFQQDFPLEFHKYCCDRC_HKJKACEBU
|
140
|
+
MPLWHTSFDUNJTMBYVRKJPRQKHXFXGPHHJLJC_BMGXFAQBL_UWRVGWJUHDGXDEFMBZSSP_KHKAYLVGLLYUGDXHCBPDC
|
141
|
+
JQCWUWLYQMRETXRLQRGFGNW_HBFDXCLDEPGRJMSQGTJUEAAYDARWYDAFCF_YVRRVNMLQRKQRLDCUTFZQJ_P_KYGZAB
|
142
|
+
CTXSYALDDUKPVVGENCNVELFLYB_HZKLYVSXXKCTFGF_CNUZTQC_ZXSQPBECDFFHJWNJZHNGKHWSNABESCNEKZXZYGQ
|
143
|
+
KQSKWA_BUNWUUWARDHBLHHURPRGCPG_ZEXVGJEKMGBYSFHWNRDEZXYSRBLBVLGAGDZWAE_ZSYTDFHQGASTPBDDZDKX
|
144
|
+
_FFPGZPRMZUWQHESHVNLPMLYA_SBNEABNGHXJMLZURSJEN_BNJLCDVHRYALTTEHGRPRXVFHTAC_MYTBHEV_EHVNFJM
|
145
|
+
ZGSPNFQSRNQADQYZTCUPZKSBY_RPYHVJMUFYFMGADDPPRCNJFTNPDLPCLMSXLEFNQNHMB_USQRNSQLNBVZQZVPTQHL
|
146
|
+
QWDVDXEALVGWSWJTHVBWNHMXHP_KCC_MVJXFR_YSDJREXJDPHTEAJTVDSTDTFKBCMMDVUPST_BPDPWSVHUYKPZWAPW
|
147
|
+
BTBH_TMTBKJHXCELLFRVMHESRSZTEH_NKRKDXPWVKXHAVWWEYQFHWRNEFTCEEXMEJTYAVPQJHNYWKZYJTMPVSKVVLB
|
148
|
+
CXEPVCARVEDLNSVDNKL_UHDANNDBS_PBHXZDGCDHPMFLUZRZZXBGLDHEMVXYMAJWGVEBHKCGYUCJV_MTTJRKHNDNTC
|
149
|
+
GDBSKGMVDCKPLBYSWBBZDLYCAXAFTPHDTEDWLPQGMRNJ_RKDTVZGAVGNEYAWTAEJ_LHCNMLCWHYMBMLCWHKMEZSTD_
|
150
|
+
ZTEKCQN_AAZSDXDTGRNVFJCHZQXZYXHXSYGLTPQWGQYQLCPVGDQQBFAPPFXLUGGRP_JEEYMXB_AGANNKQCBNLVGZL_
|
151
|
+
BLNWUQALBVLFBSNARU_YGEGAAVNM_EB_Z_SSBQGUXTRAN_AUAKGMFAJWMARKVCBPDABAZGVLKXCB_WWLEDHQLLFUFW
|
152
|
+
KGQRBZ_BJEVLPUJKAENRRZSFRXHU_EKMGWAEXHKATVVNTCGXFEKMZTZYTWHLNNAGEUVHGTLGBDLBGKTKNJBW_PZYUZ
|
153
|
+
XPTDQCWEMDDEEHLWCQYTHHUXWNUPYTMFMDGJEWDBNZMGLZRLFBZHMPYAEJJVPMKZNHVDCFKPKSKBW_NUWESYUN_JYY
|
154
|
+
NVTXRJUBGEALDNAEDFMQKPDVCBTYEGHRWZTUHBQGBW_WMERALGG_TKFNEYXZR__WLXYPQWKKFUVCNSJMGQQWDTZJQG
|
155
|
+
WJLUQJYQTEBUCVBEVAAWTAEGRCFANKZSN_EMBBMNNJGVBEHT_JKWYYMGNLWKEZKAWGLKQ_PPJBBDPASDWJSEJEDNGE
|
156
|
+
K_MZWHA_PQX_LUREDLWGSLASXNT_LJKTM_RRVMXZGBYTEEEV_ZCMXXHPLTYBQVXQFLPBBXHKU_LLDHQDDXUNQSDM_R
|
157
|
+
NUMJQAUT__RNYUQNLQJQBUNJGBBBCLGRHFQNY_JMEQXECLFJT_HVDWXM_HTLRBFLEWLTTUKWWLTATXNPKXDFFXDHG_
|
158
|
+
CXGBJLEAUJJDHLGNXFSTDRLPZUYYFYESFND_E_SQWUWFCDMJQEADJUCULXEJHBGREFEJE_DUWLRL_NWJEPTJZTLAUL
|
159
|
+
GZ_DCWAWKPP_VFDNFHQSTZV_CEBWTFSRKHVXNQKVYNJXPGUDWZFMFCKWGAFHYLEGGHDAH_FJDQCKNRNEDTWNHXXDNT
|
160
|
+
UZFBXMQFKATJCNRCBYFQVYCQYWHZFAFTXAHCFAXRVQJNTYEVHXQZRVVBWDWNBDWHDUWPQRVETEWUA_MGLVSXHRJTZC
|
161
|
+
ZVXNWGHTZGAYPCYMCYMT_RY_BWUSUYGXYG_QEEWZMURRQPNVAABXPEMNHPCUDPBNXMFNSNKBNRBHXPZJGYGTDEVBNT
|
162
|
+
DVN_QJPEVVQJLYRSNHEYWUWWWHFQBCHZWJBSDQQSQYPNVLGTLEUC__JQSJKAHZBKVBFAMWWWGRPY_WGGLJHGUUSXFD
|
163
|
+
SXJVEV_TZPLKSWTBBXRBXVJLMWZJPBGUWYNEZXBUXKEBWJNPJWVUKWRRAGJCMKDXSEADEJKUTSQVLKTDAWLGESAVHC
|
164
|
+
__HGDXDN_QLKBGPGTYSWRAXTJEHVPKWDSTTFT_PAMVKNCGGVEBMHUPLYXENFTQFJMPTZQBMTSUKXUL_ZLAZAXCKYPX
|
165
|
+
SJWBYKJHPXRWSSL_MEHXRGMUWVJRNLTN_R_JBDWXLAZVCNAYBGVQLNXUMBSDFAEPKXYXC_ZZKAPHTHVWRHQNNVFPEE
|
166
|
+
SRBWVTKMJYLNXXSABTZBMKBSHERSYJARNARKVKYCNHLVC_NEFERGLQPHMDXNAXPKJWDQLGXJ_JRKJGUCPZPCDSMFCU
|
167
|
+
HTWMQKLM__KKXYWCLGRSALKJTEXAWWZUZBQGTEBGSAAKEPXB_MPVMWQTCHRGRNXRNBKTTMDPMRZCYALGMKRYC_DQTA
|
168
|
+
LJRWXGKFSER_EBYUZTFFBVHEPLYRWUDGJRKAYQRSZVDJJQRHTSQN_NKRQDLEQJNVHGMJWLWLVHLZRVLBPQSMGHUAFJ
|
169
|
+
WJUVWNUGUFBHJBGPXBEGJVBYUTSUJRWYYMQBXWNDKRWYJZQR_B_G_RSGU_R_PBCKPZ_PGVDCMJU_ZEFNZNDZCNJZFH
|
170
|
+
KDBQ__SF_JKEDSHCAWQZGAXTBLFSBTRUU_RURQZTCFFRQF_YGSABZPG_ZCPSHYHYQCBKENEWVVAJZSSASMZ_CHCLJV
|
171
|
+
WBLDSCDJTXUGAKNNBEBYWGSLDCCUYEXMZTHVDJDTHRSRUGYYHEEYEAK_ZWU_PUAJXXKLHZRPR_RYCUVMWKULBKHVYB
|
172
|
+
JTDFHWNVHXXAQFFCYAGSYAJDQUCESY_HBXPSEBHCYHUKGERTRTCNZSR_ZXZ_GWKFMAUYPQJVS_CPNESKMHEGB_WRQK
|
173
|
+
MDSFDSVLLYBDBWXZGGKDHVVCFGLAPMWPZVLASPCVARVCAMQLXTEGLUPWPSWRFTBTVSCMRWEUVUWTYFZZSMUPMZWXRX
|
174
|
+
XHEPPBBDLPQMJVUXHVKPGVRLSUULSRTBJSNCALWEQE_J_MQCKXWEVHXZHPQESXSYJHDMYHEZG_WQCNBRGBHVZGPJUF
|
175
|
+
HYHUWBHASKPKXZAQXFQHVPSYUBDWXKAWBJRYCPXAFEUA_PMYHWERLPFSENUFAJTKGQLSZSZ__HGYZAMNAENLA_ZSJT
|
176
|
+
VT_ZUWDYLZUMCGDZALTEQDRW_VCTEGFVYSPQRCTVMEDFPBEPWUKACNNCDJSHKKASCJDDRUYA_GKLJLPE_CSNT_AMFM
|
177
|
+
ZGCJD_HMUKQWFTGJAB_SAVQC_KLNYUPADHERKSHQTHSFMTZMRMRJBMMDNPJUHSHDBVDGHFDMRZUHXDVRLBLNBQXXTX
|
178
|
+
VFJXWFKDPHWMWZGAR_MN_YL_LWTWUT_QSQGRCYBPRPXGY_FRXGCWHQGRRWVDBGMEBEEDNXQQCNHTXFYYWX_EPGQTA_
|
179
|
+
QNHKCRRPFBDZQB_QCVTQHFWSMPWQAUECSVGMH_XBKZEEGXSWPGHLSNVBJVCNUWYEXMAPFYWXWWZQSZBJNPTYMUVB_D
|
180
|
+
TVXQ_Z_AAWUDNXVXRMRP_QGVSUAUNQKZDADVPVUTSBNWHQBVMPYESMGEUDLCDDAEPHPAKFJSNALZTTZTWSXAC_YJSD
|
181
|
+
CKLAEHWZG_FUCMMAWWREVVAHKGFUYZNGSQCTREFYKTYNZFPRVHFX_WKTCSNLKLUQQTMRPMTUGTLZ_VEGRAGYZFLWGA
|
182
|
+
BPQ_QYAUKRUAPSK_XRTTNAQ_ZVXNPPLXZMFKXJJRHJEZWHXRE_PHCLDMGWVLCLGGLUUPCG_R_KXSNYTRXVYMUHVQAP
|
183
|
+
TRUB_UJPYQRSZXZPXJWXKFXGJMPW_EBNPRZDTCCUGUJLUCRRYWPSKJSLWNZNPJMTPUCMTSZLLQVLUSPQ_EQMCRAEQR
|
184
|
+
NFWESWDAWBPEGXQKWRAQZ_LNLZKSDUAVFKUJWZLGSWZLNLFURRYFLYHGYRWRXUVTRFLU_ZKB__UGLYDCJJSUHFZBUS
|
185
|
+
QFVNJYTAQ_GNGXH_PHJFGUYGZBNGZBQDU_HHWCHKVCKUACBMCFUBESTWTYSSMDQRMAHSRFLXHUTMRHNNBTW_HZDJKC
|
186
|
+
SCRWSJPAEQARDEUDVEUHZZZ_MWSTHUWDYUPFHTULHUPXGBMBMNFKRCLUYGPDRJQCTPGEZHRJTXPWRRSSPKPRLGJBZP
|
187
|
+
PPDJUGBWJEVKERNAKEFCEQWXWBKAPMDTPTGXCTLDPYRSVAFU_PZUJNXLEDGFQBHVEJAKBKENZLTRBEBLSPBLYMDHS_
|
188
|
+
NFKTTRESNHXCWEDWPKCSBRPWJSMGRVBWQSSNBLDJD_JECTBUGTMJCFKEBPBLBWTHTAGAACDHDCDSSHVKHXVFYYWZLR
|
189
|
+
XAYWHDNSJBMNBVR_LMURYYBQ_RUGAKAHJJDFGMVVKADBLWZZFDKCZXVNWQEGQRUPLPMTCKVXEWHRANUFZNQHHGFJTW
|
190
|
+
WLJ_QPAPJZEQJDQSXUFPESUSDDKLXDHVTDCUYQYNYGFXBGAZ_TXDZMCDFZASUCNETC_BVTPNFLYVDEFFTP_WLTBPZH
|
191
|
+
JYRAKCVLHZR_KDGQVNDFMMVQ_QNHVYJDQREWJWLGTUYAJECKXCJGVDQXWZTNXUMCTHKYJWKTXZEMPAAFNVLLANHGLP
|
192
|
+
BJWF_QXVQRDKXPLQJTEGTPFFML_FBHDNZUGHTRNFHLZ_MGPU_MSDFHVUARAPKBVKWUPKXYNHMKRXTSZXBQEEQQXXAZ
|
193
|
+
YFTGHTH_WCBKUQFYYEZYZBTWGHSKLKPCEAAPCJQYSDDWAFKLQAUAQHDUSSPKNEECVQULALKNBWSPFXN_XHLJLKFTRR
|
194
|
+
TZNFRTDGTYEYKMDAJMTELPERMTMBNUALNHENSKKGCZJWCJBJZQCDNWLURTCXEWFJCTEEJDKQZNXGDMSQM_JBHGACCL
|
195
|
+
MYXWTCEYZKYUNFHQRZBUMELYBTZTMERKMTRWJBAQJQFEKQAXDKQAEFPMHSDJSQKFCQGKRPZBUQRDRTCDBZGUSGUUJA
|
196
|
+
RHSZUV_QXXGYQWXTCSBW_MQDTWPYFABLFMEADWXPLYYANWVXNHF_ACBCZZCZASNKRXPAMAYUVTGDJCUBRCKSAJBLYE
|
197
|
+
VKUDUVMLMPVUYZSWMGMESLA_TPGVHQNUCFMWZSKFGRRAPWBSJBFFXQUEDJ_QYEAHFTDLAMGEXFFHPUVBMDRNMAWCE_
|
198
|
+
XLSYEPTLAWELKEDDXRSEAEXARXMMQBKL_FXXFVDNQFFEVQHBWEQENGLBWPHE_MAZFQVCHMYVQSTYSEGDLLARMNLUVT
|
199
|
+
URMBLHSBVZEGQKGAUNBWLYXWKN_Y_HXSVRYLDJMAG_MDZPEBZCDDENACPAULGZNRRFFRZCJNDZNKGPBPSBCW_DBSNW
|
200
|
+
PAQSYEKZBC_UTPCRKZFDUVQYSQBEDYEPMSUEVJTRYQLXQQGJTECSZRRZGESFPZPHWUWTUECVLQFNZFCBMBZZRRBUPD
|
201
|
+
BXLRNXWD_WEFVLLPRVYHJFYKPBGX_JUWZRTH_VZUSPUGKTSRQBNZAGELPTYCEHKAVDMCKUWSYQDFKTTNYX_G_RFDPB
|
202
|
+
|
data/csv/faild.csv
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
text
|
2
|
+
.............................................................................................
|
3
|
+
.##...##.######..####...####..######..####..##..##........######..####..######.##.....#####..
|
4
|
+
.###.###...##...##.....##.......##...##..##.###.##........##.....##..##...##...##.....##..##.
|
5
|
+
.##.#.##...##....####...####....##...##..##.##.###........####...######...##...##.....##..##.
|
6
|
+
.##...##...##.......##.....##...##...##..##.##..##........##.....##..##...##...##.....##..##.
|
7
|
+
.##...##.######..####...####..######..####..##..##........##.....##..##.######.######.#####..
|
8
|
+
.............................................................................................
|
9
|
+
|
10
|
+
create by kouta
|
11
|
+
|
12
|
+
|
data/csv/hax.csv
ADDED
@@ -0,0 +1,347 @@
|
|
1
|
+
text
|
2
|
+
|
3
|
+
#include <QDebug>
|
4
|
+
#include <QFile>
|
5
|
+
#include <QHash>
|
6
|
+
#include <QPair>
|
7
|
+
#include <QSet>
|
8
|
+
#include <limits>
|
9
|
+
#include <openbr/openbr_plugin.h>
|
10
|
+
|
11
|
+
#include openbr/core/bee.h
|
12
|
+
#include openbr/core/cluster.h
|
13
|
+
|
14
|
+
typedef QPair<int,float> Neighbor; // QPair<id,similarity>
|
15
|
+
typedef QList<Neighbor> Neighbors;
|
16
|
+
typedef QVector<Neighbors> Neighborhood;
|
17
|
+
|
18
|
+
// Compare function used to order neighbors from highest to lowest similarity
|
19
|
+
static bool compareNeighbors(const Neighbor &a, const Neighbor &b)
|
20
|
+
{
|
21
|
+
if (a.second == b.second)
|
22
|
+
return a.first < b.first;
|
23
|
+
return a.second > b.second;
|
24
|
+
}
|
25
|
+
|
26
|
+
// Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
|
27
|
+
// Ob(x) in eq. 1, modified to consider 0/1 as ground truth imposter/genuine.
|
28
|
+
static int indexOf(const Neighbors &neighbors, int i)
|
29
|
+
{
|
30
|
+
for (int j=0; j<neighbors.size(); j++) {
|
31
|
+
const Neighbor &neighbor = neighbors[j];
|
32
|
+
if (neighbor.first == i) {
|
33
|
+
if (neighbor.second == 0) return neighbors.size()-1;
|
34
|
+
else if (neighbor.second == 1) return 0;
|
35
|
+
else return j;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
return -1;
|
39
|
+
}
|
40
|
+
|
41
|
+
// Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
|
42
|
+
// Corresponds to eq. 1, or D(a,b)
|
43
|
+
static int asymmetricalROD(const Neighborhood &neighborhood, int a, int b)
|
44
|
+
{
|
45
|
+
int distance = 0;
|
46
|
+
foreach (const Neighbor &neighbor, neighborhood[a]) {
|
47
|
+
if (neighbor.first == b) break;
|
48
|
+
int index = indexOf(neighborhood[b], neighbor.first);
|
49
|
+
distance += (index == -1) ? neighborhood[b].size() : index;
|
50
|
+
}
|
51
|
+
return distance;
|
52
|
+
}
|
53
|
+
|
54
|
+
// Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
|
55
|
+
// Corresponds to eq. 2/4, or D-R(a,b)
|
56
|
+
float normalizedROD(const Neighborhood &neighborhood, int a, int b)
|
57
|
+
{
|
58
|
+
int indexA = indexOf(neighborhood[b], a);
|
59
|
+
int indexB = indexOf(neighborhood[a], b);
|
60
|
+
|
61
|
+
// Default behaviors
|
62
|
+
if ((indexA == -1) || (indexB == -1)) return std::numeric_limits<float>::max();
|
63
|
+
if ((neighborhood[b][indexA].second == 1) || (neighborhood[a][indexB].second == 1)) return 0;
|
64
|
+
if ((neighborhood[b][indexA].second == 0) || (neighborhood[a][indexB].second == 0)) return std::numeric_limits<float>::max();
|
65
|
+
|
66
|
+
int distanceA = asymmetricalROD(neighborhood, a, b);
|
67
|
+
int distanceB = asymmetricalROD(neighborhood, b, a);
|
68
|
+
return 1.f * (distanceA + distanceB) / std::min(indexA+1, indexB+1);
|
69
|
+
}
|
70
|
+
|
71
|
+
Neighborhood getNeighborhood(const QStringList &simmats)
|
72
|
+
{
|
73
|
+
Neighborhood neighborhood;
|
74
|
+
|
75
|
+
float globalMax = -std::numeric_limits<float>::max();
|
76
|
+
float globalMin = std::numeric_limits<float>::max();
|
77
|
+
int numGalleries = (int)sqrt((float)simmats.size());
|
78
|
+
if (numGalleries*numGalleries != simmats.size())
|
79
|
+
qFatal(Incorrect number of similarity matrices.);
|
80
|
+
|
81
|
+
// Process each simmat
|
82
|
+
for (int i=0; i<numGalleries; i++) {
|
83
|
+
QVector<Neighbors> allNeighbors;
|
84
|
+
|
85
|
+
int currentRows = -1;
|
86
|
+
int columnOffset = 0;
|
87
|
+
for (int j=0; j<numGalleries; j++) {
|
88
|
+
cv::Mat m = BEE::readMat(simmats[i*numGalleries+j]);
|
89
|
+
if (j==0) {
|
90
|
+
currentRows = m.rows;
|
91
|
+
allNeighbors.resize(currentRows);
|
92
|
+
}
|
93
|
+
if (currentRows != m.rows) qFatal(Row count mismatch.);
|
94
|
+
|
95
|
+
// Get data row by row
|
96
|
+
for (int k=0; k<m.rows; k++) {
|
97
|
+
Neighbors &neighbors = allNeighbors[k];
|
98
|
+
neighbors.reserve(neighbors.size() + m.cols);
|
99
|
+
for (int l=0; l<m.cols; l++) {
|
100
|
+
float val = m.at<float>(k,l);
|
101
|
+
if ((i==j) && (k==l)) continue; // Skips self-similarity scores
|
102
|
+
|
103
|
+
if ((val != -std::numeric_limits<float>::infinity()) &&
|
104
|
+
(val != std::numeric_limits<float>::infinity())) {
|
105
|
+
globalMax = std::max(globalMax, val);
|
106
|
+
globalMin = std::min(globalMin, val);
|
107
|
+
}
|
108
|
+
neighbors.append(Neighbor(l+columnOffset, val));
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
columnOffset += m.cols;
|
113
|
+
}
|
114
|
+
|
115
|
+
// Keep the top matches
|
116
|
+
for (int j=0; j<allNeighbors.size(); j++) {
|
117
|
+
Neighbors &val = allNeighbors[j];
|
118
|
+
const int cutoff = 20; // Somewhat arbitrary number of neighbors to keep
|
119
|
+
int keep = std::min(cutoff, val.size());
|
120
|
+
std::partial_sort(val.begin(), val.begin()+keep, val.end(), compareNeighbors);
|
121
|
+
neighborhood.append((Neighbors)val.mid(0, keep));
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
// Normalize scores
|
126
|
+
for (int i=0; i<neighborhood.size(); i++) {
|
127
|
+
Neighbors &neighbors = neighborhood[i];
|
128
|
+
for (int j=0; j<neighbors.size(); j++) {
|
129
|
+
Neighbor &neighbor = neighbors[j];
|
130
|
+
if (neighbor.second == -std::numeric_limits<float>::infinity())
|
131
|
+
neighbor.second = 0;
|
132
|
+
else if (neighbor.second == std::numeric_limits<float>::infinity())
|
133
|
+
neighbor.second = 1;
|
134
|
+
else
|
135
|
+
neighbor.second = (neighbor.second - globalMin) / (globalMax - globalMin);
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
return neighborhood;
|
140
|
+
}
|
141
|
+
|
142
|
+
// Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
|
143
|
+
br::Clusters br::ClusterGallery(const QStringList &simmats, float aggressiveness, const QString &csv)
|
144
|
+
{
|
145
|
+
qDebug(Clustering %d simmat(s), simmats.size());
|
146
|
+
|
147
|
+
// Read in gallery parts, keeping top neighbors of each template
|
148
|
+
Neighborhood neighborhood = getNeighborhood(simmats);
|
149
|
+
const int cutoff = neighborhood.first().size();
|
150
|
+
const float threshold = 3*cutoff/4 * aggressiveness/5;
|
151
|
+
|
152
|
+
// Initialize clusters
|
153
|
+
Clusters clusters(neighborhood.size());
|
154
|
+
for (int i=0; i<neighborhood.size(); i++)
|
155
|
+
clusters[i].append(i);
|
156
|
+
|
157
|
+
bool done = false;
|
158
|
+
while (!done) {
|
159
|
+
// nextClusterIds[i] = j means that cluster i is set to merge into cluster j
|
160
|
+
QVector<int> nextClusterIDs(neighborhood.size());
|
161
|
+
for (int i=0; i<neighborhood.size(); i++) nextClusterIDs[i] = i;
|
162
|
+
|
163
|
+
// For each cluster
|
164
|
+
for (int clusterID=0; clusterID<neighborhood.size(); clusterID++) {
|
165
|
+
const Neighbors &neighbors = neighborhood[clusterID];
|
166
|
+
int nextClusterID = nextClusterIDs[clusterID];
|
167
|
+
|
168
|
+
// Check its neighbors
|
169
|
+
foreach (const Neighbor &neighbor, neighbors) {
|
170
|
+
int neighborID = neighbor.first;
|
171
|
+
int nextNeighborID = nextClusterIDs[neighborID];
|
172
|
+
|
173
|
+
// Don't bother if they have already merged
|
174
|
+
if (nextNeighborID == nextClusterID) continue;
|
175
|
+
|
176
|
+
// Flag for merge if similar enough
|
177
|
+
if (normalizedROD(neighborhood, clusterID, neighborID) < threshold) {
|
178
|
+
if (nextClusterID < nextNeighborID) nextClusterIDs[neighborID] = nextClusterID;
|
179
|
+
else nextClusterIDs[clusterID] = nextNeighborID;
|
180
|
+
}
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
// Transitive merge
|
185
|
+
for (int i=0; i<neighborhood.size(); i++) {
|
186
|
+
int nextClusterID = i;
|
187
|
+
while (nextClusterID != nextClusterIDs[nextClusterID]) {
|
188
|
+
assert(nextClusterIDs[nextClusterID] < nextClusterID);
|
189
|
+
nextClusterID = nextClusterIDs[nextClusterID];
|
190
|
+
}
|
191
|
+
nextClusterIDs[i] = nextClusterID;
|
192
|
+
}
|
193
|
+
|
194
|
+
// Construct new clusters
|
195
|
+
QHash<int, int> clusterIDLUT;
|
196
|
+
QList<int> allClusterIDs = QSet<int>::fromList(nextClusterIDs.toList()).values();
|
197
|
+
for (int i=0; i<neighborhood.size(); i++)
|
198
|
+
clusterIDLUT[i] = allClusterIDs.indexOf(nextClusterIDs[i]);
|
199
|
+
|
200
|
+
Clusters newClusters(allClusterIDs.size());
|
201
|
+
Neighborhood newNeighborhood(allClusterIDs.size());
|
202
|
+
|
203
|
+
for (int i=0; i<neighborhood.size(); i++) {
|
204
|
+
int newID = clusterIDLUT[i];
|
205
|
+
newClusters[newID].append(clusters[i]);
|
206
|
+
newNeighborhood[newID].append(neighborhood[i]);
|
207
|
+
}
|
208
|
+
|
209
|
+
// Update indices and trim
|
210
|
+
for (int i=0; i<newNeighborhood.size(); i++) {
|
211
|
+
Neighbors &neighbors = newNeighborhood[i];
|
212
|
+
int size = qMin(neighbors.size(),cutoff);
|
213
|
+
std::partial_sort(neighbors.begin(), neighbors.begin()+size, neighbors.end(), compareNeighbors);
|
214
|
+
for (int j=0; j<size; j++)
|
215
|
+
neighbors[j].first = clusterIDLUT[j];
|
216
|
+
neighbors = neighbors.mid(0, c utoff);
|
217
|
+
}
|
218
|
+
|
219
|
+
// Update results
|
220
|
+
done = true; //(newClusters.size() >= clusters.size());
|
221
|
+
clusters = newClusters;
|
222
|
+
neighborhood = newNeighborhood;
|
223
|
+
}
|
224
|
+
|
225
|
+
// Save clusters
|
226
|
+
if (!csv.isEmpty())
|
227
|
+
WriteClusters(clusters, csv);
|
228
|
+
return clusters;
|
229
|
+
}
|
230
|
+
|
231
|
+
// Santo Fortunato Community detection in graphs, Physics Reports 486 (2010)
|
232
|
+
// wI or wII metric (page 148)
|
233
|
+
float wallaceMetric(const br::Clusters &clusters, const QVector<int> &indices)
|
234
|
+
{
|
235
|
+
int matches = 0;
|
236
|
+
int total = 0;
|
237
|
+
foreach (const QList<int> &cluster, clusters) {
|
238
|
+
for (int i=0; i<cluster.size(); i++) {
|
239
|
+
for (int j=i+1; j<cluster.size(); j++) {
|
240
|
+
total++;
|
241
|
+
if (indices[cluster[i]] == indices[cluster[j]])
|
242
|
+
matches++;
|
243
|
+
}
|
244
|
+
}
|
245
|
+
}
|
246
|
+
return (float)matches/(float)total;
|
247
|
+
}
|
248
|
+
|
249
|
+
// Santo Fortunato Community detection in graphs, Physics Reports 486 (2010)
|
250
|
+
// Jaccard index (page 149)
|
251
|
+
float jaccardIndex(const QVector<int> &indicesA, const QVector<int> &indicesB)
|
252
|
+
{
|
253
|
+
int a[2][2] = {{0,0},{0,0}};
|
254
|
+
for (int i=0; i<indicesA.size()-1; i++)
|
255
|
+
for (int j=i+1; j<indicesA.size(); j++)
|
256
|
+
a[indicesA[i] == indicesA[j] ? 1 : 0][indicesB[i] == indicesB[j] ? 1 : 0]++;
|
257
|
+
|
258
|
+
return float(a[1][1]) / (a[0][1] + a[1][0] + a[1][1]);
|
259
|
+
}
|
260
|
+
|
261
|
+
// Evaluates clustering algorithms based on metrics described in
|
262
|
+
// Santo Fortunato Community detection in graphs, Physics Reports 486 (2010)
|
263
|
+
void br::EvalClustering(const QString &csv, const QString &input)
|
264
|
+
{
|
265
|
+
qDebug(Evaluating %s against %s, qPrintable(csv), qPrintable(input));
|
266
|
+
|
267
|
+
// We assume clustering algorithms store assigned cluster labels as integers (since the clusters are
|
268
|
+
// not named). Direct use of ClusterID is not general -cao
|
269
|
+
QList<int> labels = File::get<int>(TemplateList::fromGallery(input), ClusterID);
|
270
|
+
|
271
|
+
QHash<int, int> labelToIndex;
|
272
|
+
int nClusters = 0;
|
273
|
+
for (int i=0; i<labels.size(); i++) {
|
274
|
+
const float &label = labels[i];
|
275
|
+
if (!labelToIndex.contains(label))
|
276
|
+
labelToIndex[label] = nClusters++;
|
277
|
+
}
|
278
|
+
|
279
|
+
Clusters truthClusters; truthClusters.reserve(nClusters);
|
280
|
+
for (int i=0; i<nClusters; i++)
|
281
|
+
truthClusters.append(QList<int>());
|
282
|
+
|
283
|
+
QVector<int> truthIndices(labels.size());
|
284
|
+
for (int i=0; i<labels.size(); i++) {
|
285
|
+
truthIndices[i] = labelToIndex[labels[i]];
|
286
|
+
truthClusters[labelToIndex[labels[i]]].append(i);
|
287
|
+
}
|
288
|
+
|
289
|
+
Clusters testClusters = ReadClusters(csv);
|
290
|
+
|
291
|
+
QVector<int> testIndices(labels.size());
|
292
|
+
for (int i=0; i<testClusters.size(); i++)
|
293
|
+
for (int j=0; j<testClusters[i].size(); j++)
|
294
|
+
testIndices[testClusters[i][j]] = i;
|
295
|
+
|
296
|
+
// At this point the following 4 things are defined:
|
297
|
+
// truthClusters - list of clusters of template_ids based on subject_ids
|
298
|
+
// truthIndices - template_id to cluster_id based on sigset subject_ids
|
299
|
+
// testClusters - list of clusters of template_ids based on csv input
|
300
|
+
// testIndices - template_id to cluster_id based on testClusters
|
301
|
+
|
302
|
+
float wI = wallaceMetric(truthClusters, testIndices);
|
303
|
+
float wII = wallaceMetric(testClusters, truthIndices);
|
304
|
+
float jaccard = jaccardIndex(testIndices, truthIndices);
|
305
|
+
qDebug(Recall: %f Precision: %f F-score: %f Jaccard index: %f, wI, wII, sqrt(wI*wII), jaccard);
|
306
|
+
}
|
307
|
+
|
308
|
+
br::Clusters br::ReadClusters(const QString &csv)
|
309
|
+
{
|
310
|
+
Clusters clusters;
|
311
|
+
QFile file(csv);
|
312
|
+
bool success = file.open(QFile::ReadOnly);
|
313
|
+
if (!success) qFatal(Failed to open %s for reading., qPrintable(csv));
|
314
|
+
QStringList lines = QString(file.readAll()).split(\n);
|
315
|
+
file.close();
|
316
|
+
|
317
|
+
foreach (const QString &line, lines) {
|
318
|
+
Cluster cluster;
|
319
|
+
QStringList ids = line.trimmed().split(,, QString::SkipEmptyParts);
|
320
|
+
foreach (const QString &id, ids) {
|
321
|
+
bool ok;
|
322
|
+
cluster.append(id.toInt(&ok));
|
323
|
+
if (!ok) qFatal(Non-interger id.);
|
324
|
+
}
|
325
|
+
clusters.append(cluster);
|
326
|
+
}
|
327
|
+
return clusters;
|
328
|
+
}
|
329
|
+
|
330
|
+
void br::WriteClusters(const Clusters &clusters, const QString &csv)
|
331
|
+
{
|
332
|
+
QFile file(csv);
|
333
|
+
bool success = file.open(QFile::WriteOnly);
|
334
|
+
if (!success) qFatal(Failed to open %s for writing., qPrintable(csv));
|
335
|
+
|
336
|
+
foreach (Cluster cluster, clusters) {
|
337
|
+
if (cluster.empty()) continue;
|
338
|
+
|
339
|
+
qSort(cluster);
|
340
|
+
QStringList ids;
|
341
|
+
foreach (int id, cluster)
|
342
|
+
ids.append(QString::number(id));
|
343
|
+
file.write(qPrintable(ids.join(,)+\n));
|
344
|
+
}
|
345
|
+
file.close();
|
346
|
+
}
|
347
|
+
|
data/csv/init.csv
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
text,sleep_time
|
2
|
+
initialize..,0.005
|
3
|
+
Install.. SuperHacker.exe,0.005
|
4
|
+
Loading...,0.002
|
5
|
+
Loading...,0.002
|
6
|
+
........................................................................................,0.001
|
7
|
+
..####...##..##..#####...######..#####...##..##...####....####...##..##..######..#####..,0.001
|
8
|
+
.##......##..##..##..##..##......##..##..##..##..##..##..##..##..##.##...##......##..##.,0.001
|
9
|
+
..####...##..##..#####...####....#####...######..######..##......####....####....#####..,0.001
|
10
|
+
.....##..##..##..##......##......##..##..##..##..##..##..##..##..##.##...##......##..##.,0.001
|
11
|
+
..####....####...##......######..##..##..##..##..##..##...####...##..##..######..##..##.,0.001
|
12
|
+
........................................................................................,0.001
|
13
|
+
______
|
14
|
+
/ /\
|
15
|
+
/ /##\
|
16
|
+
/ /####\
|
17
|
+
/ /######\
|
18
|
+
/ /########\
|
19
|
+
/ /##########\
|
20
|
+
/ /#####/\#####\
|
21
|
+
/ /#####/++\#####\
|
22
|
+
/ /#####/++++\#####\
|
23
|
+
/ /#####/\+++++\#####\
|
24
|
+
/ /#####/ \+++++\#####\
|
25
|
+
/ /#####/ \+++++\#####\
|
26
|
+
/ /#####/ \+++++\#####\
|
27
|
+
/ /#####/ \+++++\#####\
|
28
|
+
/ /#####/__________\+++++\#####\
|
29
|
+
/ \+++++\#####\
|
30
|
+
/__________________________\+++++\####/
|
31
|
+
\+++++++++++++++++++++++++++++++++\##/
|
32
|
+
\+++++++++++++++++++++++++++++++++\/
|
33
|
+
``````````````````````````````````
|
data/csv/log.csv
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
text
|
2
|
+
user1 pts/0 10.0.2.2 Thu Sep 20 22:55 still logged in
|
3
|
+
reboot system boot 3.10.0-862.11.6. Thu Sep 20 22:54 - 22:55 (00:00)
|
4
|
+
user1 pts/0 10.0.2.2 Sun Sep 9 04:31 - crash (11+18:23)
|
5
|
+
user1 pts/0 10.0.2.2 Sun Sep 9 04:17 - 04:31 (00:14)
|
6
|
+
reboot system boot 3.10.0-862.6.3.e Sun Sep 9 04:16 - 22:55 (11+18:38)
|
7
|
+
user1 pts/0 10.0.2.2 Tue Sep 4 23:57 - crash (4+04:19)
|
8
|
+
reboot system boot 3.10.0-862.6.3.e Tue Sep 4 23:56 - 22:55 (15+22:58)
|
9
|
+
user1 pts/0 10.0.2.2 Mon Sep 3 12:19 - 14:33 (02:13)
|
10
|
+
user1 pts/0 10.0.2.2 Mon Sep 3 12:08 - 12:17 (00:09)
|
11
|
+
reboot system boot 3.10.0-862.6.3.e Mon Sep 3 12:08 - 14:38 (02:29)
|
12
|
+
user1 pts/1 10.0.2.2 Sun Sep 2 13:16 - crash (22:52)
|
13
|
+
user1 pts/0 10.0.2.2 Sun Sep 2 08:16 - crash (1+03:52)
|
14
|
+
reboot system boot 3.10.0-862.6.3.e Sun Sep 2 08:16 - 14:38 (1+06:22)
|
15
|
+
user1 pts/0 10.0.2.2 Sat Sep 1 14:29 - 15:03 (00:33)
|
16
|
+
reboot system boot 3.10.0-862.6.3.e Sat Sep 1 14:29 - 15:03 (00:34)
|
17
|
+
user1 pts/0 10.0.2.2 Wed Aug 29 12:11 - 13:58 (01:46)
|
18
|
+
reboot system boot 3.10.0-862.6.3.e Wed Aug 29 12:11 - 15:03 (3+02:52)
|
19
|
+
user1 pts/0 10.0.2.2 Tue Aug 28 13:16 - crash (22:55)
|
20
|
+
reboot system boot 3.10.0-862.6.3.e Tue Aug 28 13:15 - 15:03 (4+01:47)
|
21
|
+
|
22
|
+
|
23
|
+
Username Port From Latest
|
24
|
+
root **Never logged in**
|
25
|
+
bin **Never logged in**
|
26
|
+
daemon **Never logged in**
|
27
|
+
adm **Never logged in**
|
28
|
+
lp **Never logged in**
|
29
|
+
sync **Never logged in**
|
30
|
+
shutdown **Never logged in**
|
31
|
+
halt **Never logged in**
|
32
|
+
mail **Never logged in**
|
33
|
+
operator **Never logged in**
|
34
|
+
ftp **Never logged in**
|
35
|
+
nobody **Never logged in**
|
36
|
+
systemd-network **Never logged in**
|
37
|
+
dbus **Never logged in**
|
38
|
+
polkitd **Never logged in**
|
39
|
+
rpc **Never logged in**
|
40
|
+
rpcuser **Never logged in**
|
41
|
+
nfsnobody **Never logged in**
|
42
|
+
sshd **Never logged in**
|
43
|
+
postfix **Never logged in**
|
44
|
+
chrony **Never logged in**
|
45
|
+
→user1 pts/0 10.0.2.2 22:55:20 +0000 2018
|
46
|
+
|
47
|
+
|
data/csv/menu.csv
ADDED
data/csv/success.csv
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
text
|
2
|
+
...........................................................................................................
|
3
|
+
.##...##.######..####...####..######..####..##..##.........####..##..##..####...####..######..####...####..
|
4
|
+
.###.###...##...##.....##.......##...##..##.###.##........##.....##..##.##..##.##..##.##.....##.....##.....
|
5
|
+
.##.#.##...##....####...####....##...##..##.##.###.........####..##..##.##.....##.....####....####...####..
|
6
|
+
.##...##...##.......##.....##...##...##..##.##..##............##.##..##.##..##.##..##.##.........##.....##.
|
7
|
+
.##...##.######..####...####..######..####..##..##.........####...####...####...####..######..####...####..
|
8
|
+
...........................................................................................................
|
9
|
+
|
10
|
+
create by kouta
|
data/exe/super_hacker
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'io/console/size'
|
2
|
+
$stdout.sync = true
|
3
|
+
|
4
|
+
#CreateCode
|
5
|
+
class CodeGenerator
|
6
|
+
def initialize
|
7
|
+
end
|
8
|
+
#単語毎に区切って表示
|
9
|
+
def type_word_code(str,split_sleep = 0.02,typing_sleep = 0.02)
|
10
|
+
str.chars do |s|
|
11
|
+
#もし空白なら空白用のスリープ時間を適用
|
12
|
+
if s == ' ' || s == '\t'
|
13
|
+
sleep(split_sleep)
|
14
|
+
print s
|
15
|
+
else
|
16
|
+
sleep(typing_sleep)
|
17
|
+
print s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
puts
|
21
|
+
end
|
22
|
+
|
23
|
+
#プログレスバーの表示
|
24
|
+
def print_progres()
|
25
|
+
100.times do |num|
|
26
|
+
print "#{num}%\r"
|
27
|
+
sleep 0.025
|
28
|
+
STDOUT.flush
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#CSVファイルの読み込み
|
33
|
+
def read_csv(file_name,sleep_time = 0.001,word_sleep = 0.02)
|
34
|
+
csv_data = CSV.read(file_name, headers: true)
|
35
|
+
csv_data.each do |data|
|
36
|
+
#もしテキストがなければ改行して次の文字へ
|
37
|
+
if data["text"].nil?
|
38
|
+
puts
|
39
|
+
next
|
40
|
+
end
|
41
|
+
|
42
|
+
#sleep_timeが設定されていれば、csvファイルのほうを有効にする
|
43
|
+
if data["sleep_time"].nil? == false
|
44
|
+
type_word_code(data["text"],word_sleep,data["sleep_time"].to_f)
|
45
|
+
else
|
46
|
+
#csvデータを表示する
|
47
|
+
type_word_code(data["text"],word_sleep,sleep_time)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data/lib/super_hacker.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
require './lib/super_hacker/version'
|
2
|
+
require 'csv'
|
3
|
+
require './lib/code_generator'
|
4
|
+
require 'securerandom'
|
5
|
+
|
6
|
+
class Hacker
|
7
|
+
def initialize
|
8
|
+
@cg = CodeGenerator.new()
|
9
|
+
end
|
10
|
+
|
11
|
+
#IPアドレスを入力するまでのシーン
|
12
|
+
def scene_input_ip
|
13
|
+
ip = "192.168.#{rand(1..99)}.#{rand(1..99)}"
|
14
|
+
@cg.type_word_code("You are Get IP address #{ip}")
|
15
|
+
@cg.type_word_code("Plz Input IP address")
|
16
|
+
print "[IP]> "
|
17
|
+
user_input_ip = gets.chomp()
|
18
|
+
#比較結果を返す
|
19
|
+
user_input_ip == ip
|
20
|
+
end
|
21
|
+
|
22
|
+
#loginするまでのシーン
|
23
|
+
def scene_login
|
24
|
+
#ダウンロード成功、色々流れてくる。
|
25
|
+
@cg.type_word_code("[CONNECTION SUCCESS]",0.02,0.01)
|
26
|
+
@cg.type_word_code("Downloading..",0.02,0.01)
|
27
|
+
@cg.print_progres()
|
28
|
+
@cg.read_csv("./csv/download.csv",0.00001,0.00001)
|
29
|
+
|
30
|
+
#パスワードを入力させる
|
31
|
+
create_password = SecureRandom.base64(5)
|
32
|
+
@cg.type_word_code("You are get Pass Word: #{create_password}")
|
33
|
+
@cg.type_word_code("Plz Input Pass Word")
|
34
|
+
print "[PassWord]> "
|
35
|
+
password = gets.chomp()
|
36
|
+
|
37
|
+
#比較結果を返す
|
38
|
+
create_password == password
|
39
|
+
end
|
40
|
+
|
41
|
+
#成功
|
42
|
+
def scene_success
|
43
|
+
@cg.read_csv("./csv/success.csv",0.001,0.001)
|
44
|
+
end
|
45
|
+
|
46
|
+
#失敗
|
47
|
+
def scene_faild
|
48
|
+
@cg.read_csv("./csv/faild.csv",0.001,0.001)
|
49
|
+
end
|
50
|
+
|
51
|
+
#実装部分
|
52
|
+
def step
|
53
|
+
#初期化csvファイルの読み込み
|
54
|
+
@cg.read_csv('./csv/init.csv')
|
55
|
+
|
56
|
+
loop do
|
57
|
+
#メニュー表示
|
58
|
+
@cg.read_csv('./csv/menu.csv')
|
59
|
+
|
60
|
+
print("(HACK_MENU)> ")
|
61
|
+
input = gets.chomp
|
62
|
+
|
63
|
+
if input == "hax"
|
64
|
+
#haxコードの表示
|
65
|
+
@cg.read_csv('./csv/hax.csv',0.002,0.0001)
|
66
|
+
@cg.read_csv('./csv/log.csv',0.002,0.0001)
|
67
|
+
|
68
|
+
#IPアドレスを入力させる
|
69
|
+
if scene_input_ip == false
|
70
|
+
@cg.type_word_code("You jare input mistakes..")
|
71
|
+
scene_faild
|
72
|
+
next
|
73
|
+
end
|
74
|
+
|
75
|
+
#loginするまでのシーン
|
76
|
+
if scene_login == false
|
77
|
+
@cg.type_word_code("You are input mistakes..")
|
78
|
+
scene_faild
|
79
|
+
next
|
80
|
+
end
|
81
|
+
|
82
|
+
@cg.type_word_code("Infiltration succeeded")
|
83
|
+
|
84
|
+
#成功
|
85
|
+
scene_success
|
86
|
+
|
87
|
+
elsif input == "exit" || input == "quit"
|
88
|
+
#終了
|
89
|
+
@cg.type_word_code("bye..")
|
90
|
+
break
|
91
|
+
else
|
92
|
+
#入力ミス
|
93
|
+
@cg.type_word_code("[INPUT ERROR]")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "super_hacker/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "super_hacker"
|
8
|
+
spec.version = SuperHacker::VERSION
|
9
|
+
spec.authors = ["kouta"]
|
10
|
+
spec.email = [""]
|
11
|
+
|
12
|
+
spec.summary = %q{SUPER HACK}
|
13
|
+
spec.description = %q{Are you Super Hacker? Yes. We are super hacker!! LOL}
|
14
|
+
spec.homepage = ""
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
|
+
# if spec.respond_to?(:metadata)
|
20
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
21
|
+
# else
|
22
|
+
# raise "RubyGems 2.0 or newer is required to protect against " \
|
23
|
+
# "public gem pushes."
|
24
|
+
# end
|
25
|
+
|
26
|
+
# Specify which files should be added to the gem when it is released.
|
27
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
28
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
29
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
30
|
+
end
|
31
|
+
spec.bindir = "exe"
|
32
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
33
|
+
spec.require_paths = ["lib"]
|
34
|
+
|
35
|
+
spec.add_development_dependency "bundler", "~> 1.16"
|
36
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
37
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
38
|
+
spec.add_development_dependency "thor"
|
39
|
+
|
40
|
+
end
|
41
|
+
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: super_hacker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- kouta
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-09-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.16'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: thor
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Are you Super Hacker? Yes. We are super hacker!! LOL
|
70
|
+
email:
|
71
|
+
- ''
|
72
|
+
executables:
|
73
|
+
- super_hacker
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- ".gitignore"
|
78
|
+
- ".travis.yml"
|
79
|
+
- CODE_OF_CONDUCT.md
|
80
|
+
- Gemfile
|
81
|
+
- Gemfile.lock
|
82
|
+
- LICENSE.txt
|
83
|
+
- README.md
|
84
|
+
- Rakefile
|
85
|
+
- bin/console
|
86
|
+
- bin/setup
|
87
|
+
- csv/download.csv
|
88
|
+
- csv/faild.csv
|
89
|
+
- csv/hax.csv
|
90
|
+
- csv/init.csv
|
91
|
+
- csv/log.csv
|
92
|
+
- csv/menu.csv
|
93
|
+
- csv/success.csv
|
94
|
+
- exe/super_hacker
|
95
|
+
- lib/code_generator.rb
|
96
|
+
- lib/super_hacker.rb
|
97
|
+
- lib/super_hacker/version.rb
|
98
|
+
- super_hacker.gemspec
|
99
|
+
homepage: ''
|
100
|
+
licenses:
|
101
|
+
- MIT
|
102
|
+
metadata: {}
|
103
|
+
post_install_message:
|
104
|
+
rdoc_options: []
|
105
|
+
require_paths:
|
106
|
+
- lib
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
requirements: []
|
118
|
+
rubyforge_project:
|
119
|
+
rubygems_version: 2.7.6
|
120
|
+
signing_key:
|
121
|
+
specification_version: 4
|
122
|
+
summary: SUPER HACK
|
123
|
+
test_files: []
|