wukong 3.0.0.pre → 3.0.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +46 -33
- data/.gitmodules +3 -0
- data/.rspec +1 -1
- data/.travis.yml +8 -1
- data/.yardopts +0 -13
- data/Guardfile +4 -6
- data/{LICENSE.textile → LICENSE.md} +43 -55
- data/README-old.md +422 -0
- data/README.md +279 -418
- data/Rakefile +21 -5
- data/TODO.md +6 -6
- data/bin/wu-clean-encoding +31 -0
- data/bin/wu-lign +2 -2
- data/bin/wu-local +69 -0
- data/bin/wu-server +70 -0
- data/examples/Gemfile +38 -0
- data/examples/README.md +9 -0
- data/examples/dataflow/apache_log_line.rb +64 -25
- data/examples/dataflow/fibonacci_series.rb +101 -0
- data/examples/dataflow/parse_apache_logs.rb +37 -7
- data/examples/{dataflow.rb → dataflow/scraper_macro_flow.rb} +0 -0
- data/examples/dataflow/simple.rb +4 -4
- data/examples/geo.rb +4 -0
- data/examples/geo/geo_grids.numbers +0 -0
- data/examples/geo/geolocated.rb +331 -0
- data/examples/geo/quadtile.rb +69 -0
- data/examples/geo/spec/geolocated_spec.rb +247 -0
- data/examples/geo/tile_fetcher.rb +77 -0
- data/examples/graph/minimum_spanning_tree.rb +61 -61
- data/examples/jabberwocky.txt +36 -0
- data/examples/models/wikipedia.rb +20 -0
- data/examples/munging/Gemfile +8 -0
- data/examples/munging/airline_flights/airline.rb +57 -0
- data/examples/munging/airline_flights/airline_flights.rake +83 -0
- data/{lib/wukong/settings.rb → examples/munging/airline_flights/airplane.rb} +0 -0
- data/examples/munging/airline_flights/airport.rb +211 -0
- data/examples/munging/airline_flights/airport_id_unification.rb +129 -0
- data/examples/munging/airline_flights/airport_ok_chars.rb +4 -0
- data/examples/munging/airline_flights/flight.rb +156 -0
- data/examples/munging/airline_flights/models.rb +4 -0
- data/examples/munging/airline_flights/parse.rb +26 -0
- data/examples/munging/airline_flights/reconcile_airports.rb +142 -0
- data/examples/munging/airline_flights/route.rb +35 -0
- data/examples/munging/airline_flights/tasks.rake +83 -0
- data/examples/munging/airline_flights/timezone_fixup.rb +62 -0
- data/examples/munging/airline_flights/topcities.rb +167 -0
- data/examples/munging/airports/40_wbans.txt +40 -0
- data/examples/munging/airports/filter_weather_reports.rb +37 -0
- data/examples/munging/airports/join.pig +31 -0
- data/examples/munging/airports/to_tsv.rb +33 -0
- data/examples/munging/airports/usa_wbans.pig +19 -0
- data/examples/munging/airports/usa_wbans.txt +2157 -0
- data/examples/munging/airports/wbans.pig +19 -0
- data/examples/munging/airports/wbans.txt +2310 -0
- data/examples/munging/geo/geo_json.rb +54 -0
- data/examples/munging/geo/geo_models.rb +69 -0
- data/examples/munging/geo/geonames_models.rb +78 -0
- data/examples/munging/geo/iso_codes.rb +172 -0
- data/examples/munging/geo/reconcile_countries.rb +124 -0
- data/examples/munging/geo/tasks.rake +71 -0
- data/examples/munging/rake_helper.rb +62 -0
- data/examples/munging/weather/.gitignore +1 -0
- data/examples/munging/weather/Gemfile +4 -0
- data/examples/munging/weather/Rakefile +28 -0
- data/examples/munging/weather/extract_ish.rb +13 -0
- data/examples/munging/weather/models/weather.rb +119 -0
- data/examples/munging/weather/utils/noaa_downloader.rb +46 -0
- data/examples/munging/wikipedia/README.md +34 -0
- data/examples/munging/wikipedia/Rakefile +193 -0
- data/examples/munging/wikipedia/articles/extract_articles-parsed.rb +79 -0
- data/examples/munging/wikipedia/articles/extract_articles-templated.rb +136 -0
- data/examples/munging/wikipedia/articles/textualize_articles.rb +54 -0
- data/examples/munging/wikipedia/articles/verify_structure.rb +43 -0
- data/examples/munging/wikipedia/articles/wp2txt-LICENSE.txt +22 -0
- data/examples/munging/wikipedia/articles/wp2txt_article.rb +259 -0
- data/examples/munging/wikipedia/articles/wp2txt_utils.rb +452 -0
- data/examples/munging/wikipedia/dbpedia/dbpedia_common.rb +4 -0
- data/examples/munging/wikipedia/dbpedia/dbpedia_extract_geocoordinates.rb +78 -0
- data/examples/munging/wikipedia/dbpedia/extract_links.rb +193 -0
- data/examples/munging/wikipedia/dbpedia/sameas_extractor.rb +20 -0
- data/examples/munging/wikipedia/n1_subuniverse/n1_nodes.pig +18 -0
- data/examples/munging/wikipedia/page_metadata/extract_page_metadata.rb +21 -0
- data/examples/munging/wikipedia/page_metadata/extract_page_metadata.rb.old +27 -0
- data/examples/munging/wikipedia/pagelinks/augment_pagelinks.pig +29 -0
- data/examples/munging/wikipedia/pagelinks/extract_pagelinks.rb +14 -0
- data/examples/munging/wikipedia/pagelinks/extract_pagelinks.rb.old +25 -0
- data/examples/munging/wikipedia/pagelinks/undirect_pagelinks.pig +29 -0
- data/examples/munging/wikipedia/pageviews/augment_pageviews.pig +32 -0
- data/examples/munging/wikipedia/pageviews/extract_pageviews.rb +85 -0
- data/examples/munging/wikipedia/pig_style_guide.md +25 -0
- data/examples/munging/wikipedia/redirects/redirects_page_metadata.pig +19 -0
- data/examples/munging/wikipedia/subuniverse/sub_articles.pig +23 -0
- data/examples/munging/wikipedia/subuniverse/sub_page_metadata.pig +24 -0
- data/examples/munging/wikipedia/subuniverse/sub_pagelinks_from.pig +22 -0
- data/examples/munging/wikipedia/subuniverse/sub_pagelinks_into.pig +22 -0
- data/examples/munging/wikipedia/subuniverse/sub_pagelinks_within.pig +26 -0
- data/examples/munging/wikipedia/subuniverse/sub_pageviews.pig +29 -0
- data/examples/munging/wikipedia/subuniverse/sub_undirected_pagelinks_within.pig +24 -0
- data/examples/munging/wikipedia/utils/get_namespaces.rb +86 -0
- data/examples/munging/wikipedia/utils/munging_utils.rb +68 -0
- data/examples/munging/wikipedia/utils/namespaces.json +1 -0
- data/examples/rake_helper.rb +85 -0
- data/examples/server_logs/geo_ip_mapping/munge_geolite.rb +82 -0
- data/examples/server_logs/logline.rb +95 -0
- data/examples/server_logs/models.rb +66 -0
- data/examples/server_logs/page_counts.pig +48 -0
- data/examples/server_logs/server_logs-01-parse-script.rb +13 -0
- data/examples/server_logs/server_logs-02-histograms-full.rb +33 -0
- data/examples/server_logs/server_logs-02-histograms-mapper.rb +14 -0
- data/{old/examples/server_logs/breadcrumbs.rb → examples/server_logs/server_logs-03-breadcrumbs-full.rb} +26 -30
- data/examples/server_logs/server_logs-04-page_page_edges-full.rb +40 -0
- data/examples/string_reverser.rb +26 -0
- data/examples/text/pig_latin.rb +2 -2
- data/examples/text/regional_flavor/README.md +14 -0
- data/examples/text/regional_flavor/article_wordbags.pig +39 -0
- data/examples/text/regional_flavor/j01-article_wordbags.rb +4 -0
- data/examples/text/regional_flavor/simple_pig_script.pig +27 -0
- data/examples/word_count/accumulator.rb +26 -0
- data/examples/word_count/tokenizer.rb +13 -0
- data/examples/word_count/word_count.rb +6 -0
- data/examples/workflow/cherry_pie.dot +97 -0
- data/examples/workflow/cherry_pie.png +0 -0
- data/examples/workflow/cherry_pie.rb +61 -26
- data/lib/hanuman.rb +34 -7
- data/lib/hanuman/graph.rb +55 -31
- data/lib/hanuman/graphvizzer.rb +199 -178
- data/lib/hanuman/graphvizzer/gv_models.rb +161 -0
- data/lib/hanuman/graphvizzer/gv_presenter.rb +97 -0
- data/lib/hanuman/link.rb +35 -0
- data/lib/hanuman/registry.rb +46 -0
- data/lib/hanuman/stage.rb +76 -32
- data/lib/wukong.rb +23 -24
- data/lib/wukong/boot.rb +87 -0
- data/lib/wukong/configuration.rb +8 -0
- data/lib/wukong/dataflow.rb +45 -78
- data/lib/wukong/driver.rb +99 -0
- data/lib/wukong/emitter.rb +22 -0
- data/lib/wukong/model/faker.rb +24 -24
- data/lib/wukong/model/flatpack_parser/flat.rb +60 -0
- data/lib/wukong/model/flatpack_parser/flatpack.rb +4 -0
- data/lib/wukong/model/flatpack_parser/lang.rb +46 -0
- data/lib/wukong/model/flatpack_parser/parser.rb +55 -0
- data/lib/wukong/model/flatpack_parser/tokens.rb +130 -0
- data/lib/wukong/processor.rb +60 -114
- data/lib/wukong/spec_helpers.rb +81 -0
- data/lib/wukong/spec_helpers/integration_driver.rb +144 -0
- data/lib/wukong/spec_helpers/integration_driver_matchers.rb +219 -0
- data/lib/wukong/spec_helpers/processor_helpers.rb +95 -0
- data/lib/wukong/spec_helpers/processor_methods.rb +108 -0
- data/lib/wukong/spec_helpers/shared_examples.rb +15 -0
- data/lib/wukong/spec_helpers/spec_driver.rb +28 -0
- data/lib/wukong/spec_helpers/spec_driver_matchers.rb +195 -0
- data/lib/wukong/version.rb +2 -1
- data/lib/wukong/widget/filters.rb +311 -0
- data/lib/wukong/widget/processors.rb +156 -0
- data/lib/wukong/widget/reducers.rb +7 -0
- data/lib/wukong/widget/reducers/accumulator.rb +73 -0
- data/lib/wukong/widget/reducers/bin.rb +318 -0
- data/lib/wukong/widget/reducers/count.rb +61 -0
- data/lib/wukong/widget/reducers/group.rb +85 -0
- data/lib/wukong/widget/reducers/group_concat.rb +70 -0
- data/lib/wukong/widget/reducers/moments.rb +72 -0
- data/lib/wukong/widget/reducers/sort.rb +130 -0
- data/lib/wukong/widget/serializers.rb +287 -0
- data/lib/wukong/widget/sink.rb +10 -52
- data/lib/wukong/widget/source.rb +7 -113
- data/lib/wukong/widget/utils.rb +46 -0
- data/lib/wukong/widgets.rb +6 -0
- data/spec/examples/dataflow/fibonacci_series_spec.rb +18 -0
- data/spec/examples/dataflow/parsing_spec.rb +12 -11
- data/spec/examples/dataflow/simple_spec.rb +32 -6
- data/spec/examples/dataflow/telegram_spec.rb +36 -36
- data/spec/examples/graph/minimum_spanning_tree_spec.rb +30 -31
- data/spec/examples/munging/airline_flights/identifiers_spec.rb +16 -0
- data/spec/examples/munging/airline_flights_spec.rb +202 -0
- data/spec/examples/text/pig_latin_spec.rb +13 -16
- data/spec/examples/workflow/cherry_pie_spec.rb +34 -4
- data/spec/hanuman/graph_spec.rb +27 -2
- data/spec/hanuman/hanuman_spec.rb +10 -0
- data/spec/hanuman/registry_spec.rb +123 -0
- data/spec/hanuman/stage_spec.rb +61 -7
- data/spec/spec_helper.rb +29 -19
- data/spec/support/hanuman_test_helpers.rb +14 -12
- data/spec/support/shared_context_for_reducers.rb +37 -0
- data/spec/support/shared_examples_for_builders.rb +101 -0
- data/spec/support/shared_examples_for_shortcuts.rb +57 -0
- data/spec/support/wukong_test_helpers.rb +37 -11
- data/spec/wukong/dataflow_spec.rb +77 -55
- data/spec/wukong/local_runner_spec.rb +24 -24
- data/spec/wukong/model/faker_spec.rb +132 -131
- data/spec/wukong/runner_spec.rb +8 -8
- data/spec/wukong/widget/filters_spec.rb +61 -0
- data/spec/wukong/widget/processors_spec.rb +126 -0
- data/spec/wukong/widget/reducers/bin_spec.rb +92 -0
- data/spec/wukong/widget/reducers/count_spec.rb +11 -0
- data/spec/wukong/widget/reducers/group_spec.rb +20 -0
- data/spec/wukong/widget/reducers/moments_spec.rb +36 -0
- data/spec/wukong/widget/reducers/sort_spec.rb +26 -0
- data/spec/wukong/widget/serializers_spec.rb +92 -0
- data/spec/wukong/widget/sink_spec.rb +15 -15
- data/spec/wukong/widget/source_spec.rb +65 -41
- data/spec/wukong/wukong_spec.rb +10 -0
- data/wukong.gemspec +17 -10
- metadata +359 -335
- data/.document +0 -5
- data/VERSION +0 -1
- data/bin/hdp-bin +0 -44
- data/bin/hdp-bzip +0 -23
- data/bin/hdp-cat +0 -3
- data/bin/hdp-catd +0 -3
- data/bin/hdp-cp +0 -3
- data/bin/hdp-du +0 -86
- data/bin/hdp-get +0 -3
- data/bin/hdp-kill +0 -3
- data/bin/hdp-kill-task +0 -3
- data/bin/hdp-ls +0 -11
- data/bin/hdp-mkdir +0 -2
- data/bin/hdp-mkdirp +0 -12
- data/bin/hdp-mv +0 -3
- data/bin/hdp-parts_to_keys.rb +0 -77
- data/bin/hdp-ps +0 -3
- data/bin/hdp-put +0 -3
- data/bin/hdp-rm +0 -32
- data/bin/hdp-sort +0 -40
- data/bin/hdp-stream +0 -40
- data/bin/hdp-stream-flat +0 -22
- data/bin/hdp-stream2 +0 -39
- data/bin/hdp-sync +0 -17
- data/bin/hdp-wc +0 -67
- data/bin/wu-flow +0 -10
- data/bin/wu-map +0 -17
- data/bin/wu-red +0 -17
- data/bin/wukong +0 -17
- data/data/CREDITS.md +0 -355
- data/data/graph/airfares.tsv +0 -2174
- data/data/text/gift_of_the_magi.txt +0 -225
- data/data/text/jabberwocky.txt +0 -36
- data/data/text/rectification_of_names.txt +0 -33
- data/data/twitter/a_atsigns_b.tsv +0 -64
- data/data/twitter/a_follows_b.tsv +0 -53
- data/data/twitter/tweet.tsv +0 -167
- data/data/twitter/twitter_user.tsv +0 -55
- data/data/wikipedia/dbpedia-sentences.tsv +0 -1000
- data/docpages/INSTALL.textile +0 -92
- data/docpages/LICENSE.textile +0 -107
- data/docpages/README-elastic_map_reduce.textile +0 -377
- data/docpages/README-performance.textile +0 -90
- data/docpages/README-wulign.textile +0 -65
- data/docpages/UsingWukong-part1-get_ready.textile +0 -17
- data/docpages/UsingWukong-part2-ThinkingBigData.textile +0 -75
- data/docpages/UsingWukong-part3-parsing.textile +0 -138
- data/docpages/_config.yml +0 -39
- data/docpages/avro/avro_notes.textile +0 -56
- data/docpages/avro/performance.textile +0 -36
- data/docpages/avro/tethering.textile +0 -19
- data/docpages/bigdata-tips.textile +0 -143
- data/docpages/code/api_response_example.txt +0 -20
- data/docpages/code/parser_skeleton.rb +0 -38
- data/docpages/diagrams/MapReduceDiagram.graffle +0 -0
- data/docpages/favicon.ico +0 -0
- data/docpages/gem.css +0 -16
- data/docpages/hadoop-tips.textile +0 -83
- data/docpages/index.textile +0 -92
- data/docpages/intro.textile +0 -8
- data/docpages/moreinfo.textile +0 -174
- data/docpages/news.html +0 -24
- data/docpages/pig/PigLatinExpressionsList.txt +0 -122
- data/docpages/pig/PigLatinReferenceManual.txt +0 -1640
- data/docpages/pig/commandline_params.txt +0 -26
- data/docpages/pig/cookbook.html +0 -481
- data/docpages/pig/images/hadoop-logo.jpg +0 -0
- data/docpages/pig/images/instruction_arrow.png +0 -0
- data/docpages/pig/images/pig-logo.gif +0 -0
- data/docpages/pig/piglatin_ref1.html +0 -1103
- data/docpages/pig/piglatin_ref2.html +0 -14340
- data/docpages/pig/setup.html +0 -505
- data/docpages/pig/skin/basic.css +0 -166
- data/docpages/pig/skin/breadcrumbs.js +0 -237
- data/docpages/pig/skin/fontsize.js +0 -166
- data/docpages/pig/skin/getBlank.js +0 -40
- data/docpages/pig/skin/getMenu.js +0 -45
- data/docpages/pig/skin/images/chapter.gif +0 -0
- data/docpages/pig/skin/images/chapter_open.gif +0 -0
- data/docpages/pig/skin/images/current.gif +0 -0
- data/docpages/pig/skin/images/external-link.gif +0 -0
- data/docpages/pig/skin/images/header_white_line.gif +0 -0
- data/docpages/pig/skin/images/page.gif +0 -0
- data/docpages/pig/skin/images/pdfdoc.gif +0 -0
- data/docpages/pig/skin/images/rc-b-l-15-1body-2menu-3menu.png +0 -0
- data/docpages/pig/skin/images/rc-b-r-15-1body-2menu-3menu.png +0 -0
- data/docpages/pig/skin/images/rc-b-r-5-1header-2tab-selected-3tab-selected.png +0 -0
- data/docpages/pig/skin/images/rc-t-l-5-1header-2searchbox-3searchbox.png +0 -0
- data/docpages/pig/skin/images/rc-t-l-5-1header-2tab-selected-3tab-selected.png +0 -0
- data/docpages/pig/skin/images/rc-t-l-5-1header-2tab-unselected-3tab-unselected.png +0 -0
- data/docpages/pig/skin/images/rc-t-r-15-1body-2menu-3menu.png +0 -0
- data/docpages/pig/skin/images/rc-t-r-5-1header-2searchbox-3searchbox.png +0 -0
- data/docpages/pig/skin/images/rc-t-r-5-1header-2tab-selected-3tab-selected.png +0 -0
- data/docpages/pig/skin/images/rc-t-r-5-1header-2tab-unselected-3tab-unselected.png +0 -0
- data/docpages/pig/skin/print.css +0 -54
- data/docpages/pig/skin/profile.css +0 -181
- data/docpages/pig/skin/screen.css +0 -587
- data/docpages/pig/tutorial.html +0 -1059
- data/docpages/pig/udf.html +0 -1509
- data/docpages/tutorial.textile +0 -283
- data/docpages/usage.textile +0 -195
- data/docpages/wutils.textile +0 -263
- data/examples/dataflow/complex.rb +0 -11
- data/examples/dataflow/donuts.rb +0 -13
- data/examples/tiny_count/jabberwocky_output.tsv +0 -92
- data/examples/word_count.rb +0 -48
- data/examples/workflow/fiddle.rb +0 -24
- data/lib/away/escapement.rb +0 -129
- data/lib/away/exe.rb +0 -11
- data/lib/away/experimental.rb +0 -5
- data/lib/away/from_file.rb +0 -52
- data/lib/away/job.rb +0 -56
- data/lib/away/job/rake_compat.rb +0 -17
- data/lib/away/registry.rb +0 -79
- data/lib/away/runner.rb +0 -276
- data/lib/away/runner/execute.rb +0 -121
- data/lib/away/script.rb +0 -161
- data/lib/away/script/hadoop_command.rb +0 -240
- data/lib/away/source/file_list_source.rb +0 -15
- data/lib/away/source/looper.rb +0 -18
- data/lib/away/task.rb +0 -219
- data/lib/hanuman/action.rb +0 -21
- data/lib/hanuman/chain.rb +0 -4
- data/lib/hanuman/graphviz.rb +0 -74
- data/lib/hanuman/resource.rb +0 -6
- data/lib/hanuman/slot.rb +0 -87
- data/lib/hanuman/slottable.rb +0 -220
- data/lib/wukong/bad_record.rb +0 -15
- data/lib/wukong/event.rb +0 -44
- data/lib/wukong/local_runner.rb +0 -55
- data/lib/wukong/mapred.rb +0 -3
- data/lib/wukong/universe.rb +0 -48
- data/lib/wukong/widget/filter.rb +0 -81
- data/lib/wukong/widget/gibberish.rb +0 -123
- data/lib/wukong/widget/monitor.rb +0 -26
- data/lib/wukong/widget/reducer.rb +0 -66
- data/lib/wukong/widget/stringifier.rb +0 -50
- data/lib/wukong/workflow.rb +0 -22
- data/lib/wukong/workflow/command.rb +0 -42
- data/old/config/emr-example.yaml +0 -48
- data/old/examples/README.txt +0 -17
- data/old/examples/contrib/jeans/README.markdown +0 -165
- data/old/examples/contrib/jeans/data/normalized_sizes +0 -3
- data/old/examples/contrib/jeans/data/orders.tsv +0 -1302
- data/old/examples/contrib/jeans/data/sizes +0 -3
- data/old/examples/contrib/jeans/normalize.rb +0 -20
- data/old/examples/contrib/jeans/sizes.rb +0 -55
- data/old/examples/corpus/bnc_word_freq.rb +0 -44
- data/old/examples/corpus/bucket_counter.rb +0 -47
- data/old/examples/corpus/dbpedia_abstract_to_sentences.rb +0 -86
- data/old/examples/corpus/sentence_bigrams.rb +0 -53
- data/old/examples/corpus/sentence_coocurrence.rb +0 -66
- data/old/examples/corpus/stopwords.rb +0 -138
- data/old/examples/corpus/words_to_bigrams.rb +0 -53
- data/old/examples/emr/README.textile +0 -110
- data/old/examples/emr/dot_wukong_dir/credentials.json +0 -7
- data/old/examples/emr/dot_wukong_dir/emr.yaml +0 -69
- data/old/examples/emr/dot_wukong_dir/emr_bootstrap.sh +0 -33
- data/old/examples/emr/elastic_mapreduce_example.rb +0 -28
- data/old/examples/network_graph/adjacency_list.rb +0 -74
- data/old/examples/network_graph/breadth_first_search.rb +0 -72
- data/old/examples/network_graph/gen_2paths.rb +0 -68
- data/old/examples/network_graph/gen_multi_edge.rb +0 -112
- data/old/examples/network_graph/gen_symmetric_links.rb +0 -64
- data/old/examples/pagerank/README.textile +0 -6
- data/old/examples/pagerank/gen_initial_pagerank_graph.pig +0 -57
- data/old/examples/pagerank/pagerank.rb +0 -72
- data/old/examples/pagerank/pagerank_initialize.rb +0 -42
- data/old/examples/pagerank/run_pagerank.sh +0 -21
- data/old/examples/sample_records.rb +0 -33
- data/old/examples/server_logs/apache_log_parser.rb +0 -15
- data/old/examples/server_logs/nook.rb +0 -48
- data/old/examples/server_logs/nook/faraday_dummy_adapter.rb +0 -94
- data/old/examples/server_logs/user_agent.rb +0 -40
- data/old/examples/simple_word_count.rb +0 -82
- data/old/examples/size.rb +0 -61
- data/old/examples/stats/avg_value_frequency.rb +0 -86
- data/old/examples/stats/binning_percentile_estimator.rb +0 -140
- data/old/examples/stats/data/avg_value_frequency.tsv +0 -3
- data/old/examples/stats/rank_and_bin.rb +0 -173
- data/old/examples/stupidly_simple_filter.rb +0 -40
- data/old/examples/word_count.rb +0 -75
- data/old/graph/graphviz_builder.rb +0 -580
- data/old/graph_easy/Attributes.pm +0 -4181
- data/old/graph_easy/Graphviz.pm +0 -2232
- data/old/wukong.rb +0 -18
- data/old/wukong/and_pig.rb +0 -38
- data/old/wukong/bad_record.rb +0 -18
- data/old/wukong/datatypes.rb +0 -24
- data/old/wukong/datatypes/enum.rb +0 -127
- data/old/wukong/datatypes/fake_types.rb +0 -17
- data/old/wukong/decorator.rb +0 -28
- data/old/wukong/encoding/asciize.rb +0 -108
- data/old/wukong/extensions.rb +0 -16
- data/old/wukong/extensions/array.rb +0 -18
- data/old/wukong/extensions/blank.rb +0 -93
- data/old/wukong/extensions/class.rb +0 -189
- data/old/wukong/extensions/date_time.rb +0 -53
- data/old/wukong/extensions/emittable.rb +0 -69
- data/old/wukong/extensions/enumerable.rb +0 -79
- data/old/wukong/extensions/hash.rb +0 -167
- data/old/wukong/extensions/hash_keys.rb +0 -16
- data/old/wukong/extensions/hash_like.rb +0 -150
- data/old/wukong/extensions/hashlike_class.rb +0 -47
- data/old/wukong/extensions/module.rb +0 -2
- data/old/wukong/extensions/pathname.rb +0 -27
- data/old/wukong/extensions/string.rb +0 -65
- data/old/wukong/extensions/struct.rb +0 -17
- data/old/wukong/extensions/symbol.rb +0 -11
- data/old/wukong/filename_pattern.rb +0 -74
- data/old/wukong/helper.rb +0 -7
- data/old/wukong/helper/stopwords.rb +0 -195
- data/old/wukong/helper/tokenize.rb +0 -35
- data/old/wukong/logger.rb +0 -38
- data/old/wukong/periodic_monitor.rb +0 -72
- data/old/wukong/schema.rb +0 -269
- data/old/wukong/script.rb +0 -286
- data/old/wukong/script/avro_command.rb +0 -5
- data/old/wukong/script/cassandra_loader_script.rb +0 -40
- data/old/wukong/script/emr_command.rb +0 -168
- data/old/wukong/script/hadoop_command.rb +0 -237
- data/old/wukong/script/local_command.rb +0 -41
- data/old/wukong/store.rb +0 -10
- data/old/wukong/store/base.rb +0 -27
- data/old/wukong/store/cassandra.rb +0 -10
- data/old/wukong/store/cassandra/streaming.rb +0 -75
- data/old/wukong/store/cassandra/struct_loader.rb +0 -21
- data/old/wukong/store/cassandra_model.rb +0 -91
- data/old/wukong/store/chh_chunked_flat_file_store.rb +0 -37
- data/old/wukong/store/chunked_flat_file_store.rb +0 -48
- data/old/wukong/store/conditional_store.rb +0 -57
- data/old/wukong/store/factory.rb +0 -8
- data/old/wukong/store/flat_file_store.rb +0 -89
- data/old/wukong/store/key_store.rb +0 -51
- data/old/wukong/store/null_store.rb +0 -15
- data/old/wukong/store/read_thru_store.rb +0 -22
- data/old/wukong/store/tokyo_tdb_key_store.rb +0 -33
- data/old/wukong/store/tyrant_rdb_key_store.rb +0 -57
- data/old/wukong/store/tyrant_tdb_key_store.rb +0 -20
- data/old/wukong/streamer.rb +0 -30
- data/old/wukong/streamer/accumulating_reducer.rb +0 -83
- data/old/wukong/streamer/base.rb +0 -126
- data/old/wukong/streamer/counting_reducer.rb +0 -25
- data/old/wukong/streamer/filter.rb +0 -20
- data/old/wukong/streamer/instance_streamer.rb +0 -15
- data/old/wukong/streamer/json_streamer.rb +0 -21
- data/old/wukong/streamer/line_streamer.rb +0 -12
- data/old/wukong/streamer/list_reducer.rb +0 -31
- data/old/wukong/streamer/rank_and_bin_reducer.rb +0 -145
- data/old/wukong/streamer/record_streamer.rb +0 -14
- data/old/wukong/streamer/reducer.rb +0 -11
- data/old/wukong/streamer/set_reducer.rb +0 -14
- data/old/wukong/streamer/struct_streamer.rb +0 -48
- data/old/wukong/streamer/summing_reducer.rb +0 -29
- data/old/wukong/streamer/uniq_by_last_reducer.rb +0 -51
- data/old/wukong/typed_struct.rb +0 -12
- data/spec/away/encoding_spec.rb +0 -32
- data/spec/away/exe_spec.rb +0 -20
- data/spec/away/flow_spec.rb +0 -82
- data/spec/away/graph_spec.rb +0 -6
- data/spec/away/job_spec.rb +0 -15
- data/spec/away/rake_compat_spec.rb +0 -9
- data/spec/away/script_spec.rb +0 -81
- data/spec/hanuman/graphviz_spec.rb +0 -29
- data/spec/hanuman/slot_spec.rb +0 -2
- data/spec/support/examples_helper.rb +0 -10
- data/spec/support/streamer_test_helpers.rb +0 -6
- data/spec/support/wukong_widget_helpers.rb +0 -66
- data/spec/wukong/processor_spec.rb +0 -109
- data/spec/wukong/widget/filter_spec.rb +0 -99
- data/spec/wukong/widget/stringifier_spec.rb +0 -51
- data/spec/wukong/workflow/command_spec.rb +0 -5
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'date'
|
2
|
+
require 'gorillib/hash/zip'
|
3
|
+
|
4
|
+
class Airport
|
5
|
+
|
6
|
+
class TimezoneFixup
|
7
|
+
|
8
|
+
YEARS = (2010 .. 2012).to_a
|
9
|
+
|
10
|
+
DST_RULES = {
|
11
|
+
'E' => { name: 'European', beg_doy: 'last Sunday in March', end_doy: 'last Sunday in October', beg_dates: {}, end_dates: {}, used_in: 'all European countries (except Iceland), as well as Greenland, Lebanon, Russia and Tunisia. Jordan and Syria are almost the same, starting and ending on Friday instead of Sunday. European DST is also used to (crudely) approximate Iranian DST, although they actually use an entirely different calendar.', },
|
12
|
+
'A' => { name: 'US/Canada', beg_doy: '2nd Sunday in March', end_doy: '1st Sunday in November', beg_dates: {}, end_dates: {}, used_in: 'the United States (except Arizona, Hawaii and island territories) and Canada (with convoluted exceptions).', },
|
13
|
+
'S' => { name: 'South American', beg_doy: '3rd Sunday in March', end_doy: '3rd Sunday in October', southern: true, beg_dates: {}, end_dates: {}, used_in: 'With some variance in the exact dates, in Argentina, Chile, Mexico, Paraguay, Uruguay as well as the African states of Namibia and Mauritius.', },
|
14
|
+
'O' => { name: 'Australia', beg_doy: '1st Sunday in April', end_doy: '1st Sunday in October', southern: true, beg_dates: {}, end_dates: {}, used_in: 'Australia, except for Queensland and the Northern Territory.' },
|
15
|
+
'Z' => { name: 'New Zealand', beg_doy: '1st Sunday in April', end_doy: 'last Sunday in September', southern: true, beg_dates: {}, end_dates: {}, used_in: 'New Zealand', },
|
16
|
+
'N' => { name: 'None', beg_doy: nil, end_doy: nil, beg_dates: {}, end_dates: {}, used_in: 'DST not observed.', },
|
17
|
+
'U' => { name: 'Unknown', beg_doy: nil, end_doy: nil, beg_dates: {}, end_dates: {}, used_in: 'DST status not known. The same as "None".', },
|
18
|
+
}
|
19
|
+
|
20
|
+
DST_RULES['E'][:beg_dates] = { 1987 => "1987-03-29", 1988 => "1988-03-27", 1989 => "1989-03-26", 1990 => "1990-03-25", 1991 => "1991-03-31", 1992 => "1992-03-29", 1993 => "1993-03-28", 1994 => "1994-03-27", 1995 => "1995-03-26", 1996 => "1996-03-31", 1997 => "1997-03-30", 1998 => "1998-03-29", 1999 => "1999-03-28", 2000 => "2000-03-26", 2001 => "2001-03-25", 2002 => "2002-03-31", 2003 => "2003-03-30", 2004 => "2004-03-28", 2005 => "2005-03-27", 2006 => "2006-03-26", 2007 => "2007-03-25", 2008 => "2008-03-30", 2009 => "2009-03-29", 2010 => "2010-03-28", 2011 => "2011-03-27", 2012 => "2012-03-25", 2013 => "2013-03-31", 2014 => "2014-03-30", 2015 => "2015-03-29", 2016 => "2016-03-27", 2017 => "2017-03-26", 2018 => "2018-03-25", 2019 => "2019-03-31", 2020 => "2020-03-29", }.tap{|hsh| hsh.each{|year,date_str| hsh[year] = Date.parse(date_str) } }
|
21
|
+
DST_RULES['E'][:end_dates] = { 1987 => "1987-10-25", 1988 => "1988-10-30", 1989 => "1989-10-29", 1990 => "1990-10-28", 1991 => "1991-10-27", 1992 => "1992-10-25", 1993 => "1993-10-31", 1994 => "1994-10-30", 1995 => "1995-10-29", 1996 => "1996-10-27", 1997 => "1997-10-26", 1998 => "1998-10-25", 1999 => "1999-10-31", 2000 => "2000-10-29", 2001 => "2001-10-28", 2002 => "2002-10-27", 2003 => "2003-10-26", 2004 => "2004-10-31", 2005 => "2005-10-30", 2006 => "2006-10-29", 2007 => "2007-10-28", 2008 => "2008-10-26", 2009 => "2009-10-25", 2010 => "2010-10-31", 2011 => "2011-10-30", 2012 => "2012-10-28", 2013 => "2013-10-27", 2014 => "2014-10-26", 2015 => "2015-10-25", 2016 => "2016-10-30", 2017 => "2017-10-29", 2018 => "2018-10-28", 2019 => "2019-10-27", 2020 => "2020-10-25", }.tap{|hsh| hsh.each{|year,date_str| hsh[year] = Date.parse(date_str) } }
|
22
|
+
DST_RULES['A'][:beg_dates] = { 1987 => "1987-03-08", 1988 => "1988-03-13", 1989 => "1989-03-12", 1990 => "1990-03-11", 1991 => "1991-03-10", 1992 => "1992-03-08", 1993 => "1993-03-14", 1994 => "1994-03-13", 1995 => "1995-03-12", 1996 => "1996-03-10", 1997 => "1997-03-09", 1998 => "1998-03-08", 1999 => "1999-03-14", 2000 => "2000-03-12", 2001 => "2001-03-11", 2002 => "2002-03-10", 2003 => "2003-03-09", 2004 => "2004-03-14", 2005 => "2005-03-13", 2006 => "2006-03-12", 2007 => "2007-03-11", 2008 => "2008-03-09", 2009 => "2009-03-08", 2010 => "2010-03-14", 2011 => "2011-03-13", 2012 => "2012-03-11", 2013 => "2013-03-10", 2014 => "2014-03-09", 2015 => "2015-03-08", 2016 => "2016-03-13", 2017 => "2017-03-12", 2018 => "2018-03-11", 2019 => "2019-03-10", 2020 => "2020-03-08", }.tap{|hsh| hsh.each{|year,date_str| hsh[year] = Date.parse(date_str) } }
|
23
|
+
DST_RULES['A'][:end_dates] = { 1987 => "1987-11-01", 1988 => "1988-11-06", 1989 => "1989-11-05", 1990 => "1990-11-04", 1991 => "1991-11-03", 1992 => "1992-11-01", 1993 => "1993-11-07", 1994 => "1994-11-06", 1995 => "1995-11-05", 1996 => "1996-11-03", 1997 => "1997-11-02", 1998 => "1998-11-01", 1999 => "1999-11-07", 2000 => "2000-11-05", 2001 => "2001-11-04", 2002 => "2002-11-03", 2003 => "2003-11-02", 2004 => "2004-11-07", 2005 => "2005-11-06", 2006 => "2006-11-05", 2007 => "2007-11-04", 2008 => "2008-11-02", 2009 => "2009-11-01", 2010 => "2010-11-07", 2011 => "2011-11-06", 2012 => "2012-11-04", 2013 => "2013-11-03", 2014 => "2014-11-02", 2015 => "2015-11-01", 2016 => "2016-11-06", 2017 => "2017-11-05", 2018 => "2018-11-04", 2019 => "2019-11-03", 2020 => "2020-11-01", }.tap{|hsh| hsh.each{|year,date_str| hsh[year] = Date.parse(date_str) } }
|
24
|
+
DST_RULES['S'][:beg_dates] = { 1987 => "1987-10-18", 1988 => "1988-10-16", 1989 => "1989-10-15", 1990 => "1990-10-21", 1991 => "1991-10-20", 1992 => "1992-10-18", 1993 => "1993-10-17", 1994 => "1994-10-16", 1995 => "1995-10-15", 1996 => "1996-10-20", 1997 => "1997-10-19", 1998 => "1998-10-18", 1999 => "1999-10-17", 2000 => "2000-10-15", 2001 => "2001-10-21", 2002 => "2002-10-20", 2003 => "2003-10-19", 2004 => "2004-10-17", 2005 => "2005-10-16", 2006 => "2006-10-15", 2007 => "2007-10-21", 2008 => "2008-10-19", 2009 => "2009-10-18", 2010 => "2010-10-17", 2011 => "2011-10-16", 2012 => "2012-10-21", 2013 => "2013-10-20", 2014 => "2014-10-19", 2015 => "2015-10-18", 2016 => "2016-10-16", 2017 => "2017-10-15", 2018 => "2018-10-21", 2019 => "2019-10-20", 2020 => "2020-10-18", }.tap{|hsh| hsh.each{|year,date_str| hsh[year] = Date.parse(date_str) } }
|
25
|
+
DST_RULES['S'][:end_dates] = { 1987 => "1987-03-15", 1988 => "1988-03-20", 1989 => "1989-03-19", 1990 => "1990-03-18", 1991 => "1991-03-17", 1992 => "1992-03-15", 1993 => "1993-03-21", 1994 => "1994-03-20", 1995 => "1995-03-19", 1996 => "1996-03-17", 1997 => "1997-03-16", 1998 => "1998-03-15", 1999 => "1999-03-21", 2000 => "2000-03-19", 2001 => "2001-03-18", 2002 => "2002-03-17", 2003 => "2003-03-16", 2004 => "2004-03-21", 2005 => "2005-03-20", 2006 => "2006-03-19", 2007 => "2007-03-18", 2008 => "2008-03-16", 2009 => "2009-03-15", 2010 => "2010-03-21", 2011 => "2011-03-20", 2012 => "2012-03-18", 2013 => "2013-03-17", 2014 => "2014-03-16", 2015 => "2015-03-15", 2016 => "2016-03-20", 2017 => "2017-03-19", 2018 => "2018-03-18", 2019 => "2019-03-17", 2020 => "2020-03-15", }.tap{|hsh| hsh.each{|year,date_str| hsh[year] = Date.parse(date_str) } }
|
26
|
+
DST_RULES['O'][:beg_dates] = { 1987 => "1987-10-04", 1988 => "1988-10-02", 1989 => "1989-10-01", 1990 => "1990-10-07", 1991 => "1991-10-06", 1992 => "1992-10-04", 1993 => "1993-10-03", 1994 => "1994-10-02", 1995 => "1995-10-01", 1996 => "1996-10-06", 1997 => "1997-10-05", 1998 => "1998-10-04", 1999 => "1999-10-03", 2000 => "2000-10-01", 2001 => "2001-10-07", 2002 => "2002-10-06", 2003 => "2003-10-05", 2004 => "2004-10-03", 2005 => "2005-10-02", 2006 => "2006-10-01", 2007 => "2007-10-07", 2008 => "2008-10-05", 2009 => "2009-10-04", 2010 => "2010-10-03", 2011 => "2011-10-02", 2012 => "2012-10-07", 2013 => "2013-10-06", 2014 => "2014-10-05", 2015 => "2015-10-04", 2016 => "2016-10-02", 2017 => "2017-10-01", 2018 => "2018-10-07", 2019 => "2019-10-06", 2020 => "2020-10-04", }.tap{|hsh| hsh.each{|year,date_str| hsh[year] = Date.parse(date_str) } }
|
27
|
+
DST_RULES['O'][:end_dates] = { 1987 => "1987-04-05", 1988 => "1988-04-03", 1989 => "1989-04-02", 1990 => "1990-04-01", 1991 => "1991-04-07", 1992 => "1992-04-05", 1993 => "1993-04-04", 1994 => "1994-04-03", 1995 => "1995-04-02", 1996 => "1996-04-07", 1997 => "1997-04-06", 1998 => "1998-04-05", 1999 => "1999-04-04", 2000 => "2000-04-02", 2001 => "2001-04-01", 2002 => "2002-04-07", 2003 => "2003-04-06", 2004 => "2004-04-04", 2005 => "2005-04-03", 2006 => "2006-04-02", 2007 => "2007-04-01", 2008 => "2008-04-06", 2009 => "2009-04-05", 2010 => "2010-04-04", 2011 => "2011-04-03", 2012 => "2012-04-01", 2013 => "2013-04-07", 2014 => "2014-04-06", 2015 => "2015-04-05", 2016 => "2016-04-03", 2017 => "2017-04-02", 2018 => "2018-04-01", 2019 => "2019-04-07", 2020 => "2020-04-05", }.tap{|hsh| hsh.each{|year,date_str| hsh[year] = Date.parse(date_str) } }
|
28
|
+
DST_RULES['Z'][:beg_dates] = { 1987 => "1987-09-27", 1988 => "1988-09-25", 1989 => "1989-09-24", 1990 => "1990-09-30", 1991 => "1991-09-29", 1992 => "1992-09-27", 1993 => "1993-09-26", 1994 => "1994-09-25", 1995 => "1995-09-24", 1996 => "1996-09-29", 1997 => "1997-09-28", 1998 => "1998-09-27", 1999 => "1999-09-26", 2000 => "2000-09-24", 2001 => "2001-09-30", 2002 => "2002-09-29", 2003 => "2003-09-28", 2004 => "2004-09-26", 2005 => "2005-09-25", 2006 => "2006-09-24", 2007 => "2007-09-30", 2008 => "2008-09-28", 2009 => "2009-09-27", 2010 => "2010-09-26", 2011 => "2011-09-25", 2012 => "2012-09-30", 2013 => "2013-09-29", 2014 => "2014-09-28", 2015 => "2015-09-27", 2016 => "2016-09-25", 2017 => "2017-09-24", 2018 => "2018-09-30", 2019 => "2019-09-29", 2020 => "2020-09-27", }.tap{|hsh| hsh.each{|year,date_str| hsh[year] = Date.parse(date_str) } }
|
29
|
+
DST_RULES['Z'][:end_dates] = { 1987 => "1987-04-05", 1988 => "1988-04-03", 1989 => "1989-04-02", 1990 => "1990-04-01", 1991 => "1991-04-07", 1992 => "1992-04-05", 1993 => "1993-04-04", 1994 => "1994-04-03", 1995 => "1995-04-02", 1996 => "1996-04-07", 1997 => "1997-04-06", 1998 => "1998-04-05", 1999 => "1999-04-04", 2000 => "2000-04-02", 2001 => "2001-04-01", 2002 => "2002-04-07", 2003 => "2003-04-06", 2004 => "2004-04-04", 2005 => "2005-04-03", 2006 => "2006-04-02", 2007 => "2007-04-01", 2008 => "2008-04-06", 2009 => "2009-04-05", 2010 => "2010-04-04", 2011 => "2011-04-03", 2012 => "2012-04-01", 2013 => "2013-04-07", 2014 => "2014-04-06", 2015 => "2015-04-05", 2016 => "2016-04-03", 2017 => "2017-04-02", 2018 => "2018-04-01", 2019 => "2019-04-07", 2020 => "2020-04-05", }.tap{|hsh| hsh.each{|year,date_str| hsh[year] = Date.parse(date_str) } }
|
30
|
+
|
31
|
+
def self.parse_boundary(str, *args)
|
32
|
+
require 'chronic'
|
33
|
+
rank, weekday, art, month = str.split(/\s+/)
|
34
|
+
if rank == 'last'
|
35
|
+
val = ['5th', '4th'].map{|wk| Chronic.parse([wk, weekday, art, month].join(' '), *args) }.compact.first
|
36
|
+
else
|
37
|
+
val = Chronic.parse(str, *args)
|
38
|
+
end
|
39
|
+
Date.new(val.year, val.month, val.day)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.beg_date(rule, year)
|
43
|
+
DST_RULES[rule][:beg_dates][year] ||= parse_boundary(DST_RULES[rule][:beg_doy], now: Time.utc(year, 1, 1))
|
44
|
+
end
|
45
|
+
def self.end_date(rule, year)
|
46
|
+
DST_RULES[rule][:end_dates][year] ||= parse_boundary(DST_RULES[rule][:end_doy], now: Time.utc(year, 1, 1))
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.table
|
50
|
+
%w[E A S O Z].each{|rule| YEARS.each{|year| beg_date(rule, year) ; end_date(rule, year) } }
|
51
|
+
DST_RULES
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.dst?(rule, val)
|
55
|
+
early = beg_date(rule, val.year)
|
56
|
+
late = end_date(rule, val.year)
|
57
|
+
in_range = (val >= early) && (val < late)
|
58
|
+
DST_RULES[rule][:southern] ? (not in_range) : in_range
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require('rake')
|
3
|
+
require_relative('../../rake_helper')
|
4
|
+
require_relative './models'
|
5
|
+
|
6
|
+
Pathname.register_paths(
|
7
|
+
af_data: [:data, 'airline_flights'],
|
8
|
+
af_work: [:work, 'airline_flights'],
|
9
|
+
af_code: File.dirname(__FILE__),
|
10
|
+
airport_identifiers: [:af_work, "airport_identifiers.tsv" ],
|
11
|
+
)
|
12
|
+
|
13
|
+
AIRPORTS_TO_MATCH = [
|
14
|
+
[ 'Tokyo', 1, "HND", ],
|
15
|
+
[ 'Guangzhou', 2, "CAN", ],
|
16
|
+
[ 'Seoul', 3, "ICN", ],
|
17
|
+
[ 'Shanghai', 4, "PVG", ],
|
18
|
+
[ 'Mexico.*City', 5, "MEX", ],
|
19
|
+
[ 'Delhi', 6, "DEL", ],
|
20
|
+
[ 'New.*York', 7, "JFK", ],
|
21
|
+
[ 'S.*o.*Paulo', 8, "GRU", ],
|
22
|
+
[ 'Mumbai|Bombay', 9, "BOM", ],
|
23
|
+
[ 'Manila', 10, "MNL", ],
|
24
|
+
[ 'Jakarta', 11, "CGK", ],
|
25
|
+
[ 'Los.*Angeles', 12, "LAX", ],
|
26
|
+
[ 'Karachi', 13, "KHI", ],
|
27
|
+
[ 'Osaka', 14, "KIX", ],
|
28
|
+
[ 'Beijing', 15, "PEK", ],
|
29
|
+
[ 'Moscow', 16, "SVO", ],
|
30
|
+
[ 'Cairo', 17, "CAI", ],
|
31
|
+
[ 'Kolkata|Calcutta', 18, "CCU", ],
|
32
|
+
[ 'Buenos.*Aires', 19, "EZE", ],
|
33
|
+
[ 'Dhaka', 20, "DAC", ],
|
34
|
+
[ 'Bangkok', 21, "BKK", ],
|
35
|
+
[ 'Tehran|Abyek', 22, "IKA", ],
|
36
|
+
[ 'Istanbul', 23, "IST", ],
|
37
|
+
[ 'Janeiro', 24, "GIG", ],
|
38
|
+
[ 'London', 25, "LHR", ],
|
39
|
+
[ 'Lagos', 26, "LOS", ],
|
40
|
+
[ 'Paris', 27, "CDG", ],
|
41
|
+
[ 'Chicago', 28, "ORD", ],
|
42
|
+
[ 'Kinshasa', 29, "FIH", ],
|
43
|
+
[ 'Lima', 30, "LIM", ],
|
44
|
+
[ 'Wuhan', 31, "WUH", ],
|
45
|
+
[ 'Bangalore', 32, "BLR", ],
|
46
|
+
[ 'Bogot.*', 33, "BOG", ],
|
47
|
+
[ 'Taipei', 34, "TSA", ],
|
48
|
+
[ 'Washington|Arling', 35, "DCA", ],
|
49
|
+
[ 'Johannesburg', 36, "JNB", ],
|
50
|
+
[ 'Saigon|Ho.Chi.M', 37, "SGN", ],
|
51
|
+
[ 'San.*Francisco', 38, "SFO", ],
|
52
|
+
[ 'Boston', 39, "BOS", ],
|
53
|
+
[ 'Hong.*Kong', 40, "HKG", ],
|
54
|
+
[ 'Baghdad', 41, "SDA", ],
|
55
|
+
[ 'Madrid', 42, "MAD", ],
|
56
|
+
[ 'Singapore', 43, "SIN", ],
|
57
|
+
[ 'Kuala.*Lumpur', 44, "KUL", ],
|
58
|
+
[ 'Chongqing|Chung.*', 45, "CKG", ],
|
59
|
+
[ 'Santiago', 46, "SCL", ],
|
60
|
+
[ 'Toronto', 47, "YYZ", ],
|
61
|
+
[ 'Riyadh', 48, "RUH", ],
|
62
|
+
[ 'Atlanta', 49, "ATL", ],
|
63
|
+
[ 'Miami', 50, "MIA", ],
|
64
|
+
[ 'Detroit', 51, "DTW", ],
|
65
|
+
[ 'St..*Petersburg', 52, "LED", ],
|
66
|
+
[ 'Khartoum', 53, "KRT", ],
|
67
|
+
[ 'Sydney', 54, "SYD", ],
|
68
|
+
[ 'Milan', 55, "MXP", ],
|
69
|
+
[ 'Abidjan', 56, "ABJ", ],
|
70
|
+
[ 'Barcelona', 57, "BCN", ],
|
71
|
+
[ 'Nairobi', 58, "NBO", ],
|
72
|
+
[ 'Caracas', 59, "CCS", ],
|
73
|
+
[ 'Monterrey', 60, "MTY", ],
|
74
|
+
[ 'Phoenix', 61, "PHX", ],
|
75
|
+
[ 'Berlin', 62, "TXL", ],
|
76
|
+
[ 'Melbourne', 63, "MEL", ],
|
77
|
+
[ 'Casablanca', 64, "CMN", ],
|
78
|
+
[ 'Montreal', 65, "YUL", ],
|
79
|
+
[ 'Salvador', 66, "SSA", ],
|
80
|
+
[ 'Rome', 67, "FCO", ],
|
81
|
+
[ 'Kiev', 68, "KBP", ],
|
82
|
+
[ 'Ad+is.*Ab.ba', 69, "ADD", ],
|
83
|
+
[ 'Denver', 70, "DEN", ],
|
84
|
+
[ 'St.*Louis', 71, "STL", ],
|
85
|
+
[ 'Dakar', 72, "DKR", ],
|
86
|
+
[ 'San.*Juan', 73, "SJU", ],
|
87
|
+
[ 'Vancouver', 74, "YVR", ],
|
88
|
+
[ 'Tel.*Aviv', 75, "TLV", ],
|
89
|
+
[ 'Tunis', 76, "TUN", ],
|
90
|
+
[ 'Portland', 77, "PDX", ],
|
91
|
+
[ 'Manaus', 78, "MAO", ],
|
92
|
+
[ 'Calgary', 79, "YYC", ],
|
93
|
+
[ 'Halifax', 80, "YHZ", ],
|
94
|
+
[ 'Prague', 81, "PRG", ],
|
95
|
+
[ 'Copenhagen', 82, "CPH", ],
|
96
|
+
[ 'Djibouti', 83, "JIB", ],
|
97
|
+
[ 'Quito', 84, "UIO", ],
|
98
|
+
[ 'Helsinki', 85, "HEL", ],
|
99
|
+
[ 'Papeete|Tahiti', 86, "PPT", ],
|
100
|
+
[ 'Frankfurt', 87, "FRA", ],
|
101
|
+
[ 'Reykjavik', 88, "RKV", ],
|
102
|
+
[ 'Riga', 89, "RIX", ],
|
103
|
+
[ 'Antananarivo', 90, "TNR", ],
|
104
|
+
[ 'Amsterdam', 91, "AMS", ],
|
105
|
+
[ 'Bucharest', 92, "OTP", ],
|
106
|
+
[ 'Novosibirsk', 93, "OVB", ],
|
107
|
+
[ 'Kigali', 94, "KGL", ],
|
108
|
+
[ 'Dushanbe', 95, "DYU", ],
|
109
|
+
[ 'Dubai', 96, "DXB", ],
|
110
|
+
[ 'Bermuda', 97, "BDA", ],
|
111
|
+
[ 'Anchorage', 98, "ANC", ],
|
112
|
+
[ 'Austin', 99, "AUS", ],
|
113
|
+
[ 'Honolulu', 100, "HNL", ],
|
114
|
+
[ 'Apia', 101, "FGI", ],
|
115
|
+
[ 'Vienna', 102, "VIE", ],
|
116
|
+
[ 'Brussels', 103, "BRU", ],
|
117
|
+
[ 'Munich', 104, "MUC", ],
|
118
|
+
[ 'Dublin', 105, "DUB", ],
|
119
|
+
[ 'Doha', 106, "DOH", ],
|
120
|
+
[ 'Taipei', 107, "TPE", ],
|
121
|
+
[ 'Yakutsk', 108, "YKS", ],
|
122
|
+
[ 'Z.rich', 109, "ZRH", ],
|
123
|
+
[ 'Manchester', 110, "MAN", ],
|
124
|
+
[ 'Houston', 111, "IAH", ],
|
125
|
+
[ 'Charlotte', 112, "CLT", ],
|
126
|
+
[ 'Dallas', 113, "DFW", ],
|
127
|
+
[ 'Las.*Vegas', 114, "LAS", ],
|
128
|
+
[ 'Antalya', 115, "AYT", ],
|
129
|
+
[ 'Auckland', 116, "AKL", ],
|
130
|
+
]
|
131
|
+
|
132
|
+
MATCHED_AIRPORTS = {}
|
133
|
+
MATCH_ON_IATA = {}
|
134
|
+
MATCH_ON_CITY = {}
|
135
|
+
match_on_city_names = []
|
136
|
+
|
137
|
+
AIRPORTS_TO_MATCH.each do |name, idx, iata|
|
138
|
+
hsh = {iata: iata, re: Regexp.new(name, 'i'), name: name, idx: idx}
|
139
|
+
if iata.present?
|
140
|
+
MATCH_ON_IATA[iata] = hsh
|
141
|
+
else
|
142
|
+
match_on_city_names << name
|
143
|
+
MATCH_ON_CITY[hsh[:re]] = hsh
|
144
|
+
end
|
145
|
+
end
|
146
|
+
match_on_city_re = Regexp.new(match_on_city_names.join('|'))
|
147
|
+
|
148
|
+
Airport.load_tsv(:airport_identifiers) do |airport|
|
149
|
+
airport.name = airport.name[0..30]
|
150
|
+
if MATCH_ON_IATA.include?(airport.iata)
|
151
|
+
hsh = MATCH_ON_IATA[airport.iata]
|
152
|
+
warn [hsh.values, airport.to_tsv].flatten.join("\t") unless hsh[:re] =~ airport.city
|
153
|
+
MATCHED_AIRPORTS[hsh[:idx]] = airport
|
154
|
+
# elsif (airport.city =~ match_on_city_re)
|
155
|
+
# MATCH_ON_CITY.each do |re, hsh|
|
156
|
+
# if (airport.city =~ re)
|
157
|
+
# puts [airport.to_tsv, hsh[:name], hsh[:idx]].join("\t")
|
158
|
+
# end
|
159
|
+
# end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
AIRPORTS_TO_MATCH.each do |name, idx, iata|
|
164
|
+
# next if MATCHED_AIRPORTS[idx]
|
165
|
+
airport_str = MATCHED_AIRPORTS[idx] ? MATCHED_AIRPORTS[idx].to_tsv : "\t\t\t\t\t\t\t\t\t\t\t\t"
|
166
|
+
puts [airport_str, name, "", idx].join("\t")
|
167
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
13874
|
2
|
+
13874
|
3
|
+
14739
|
4
|
+
13881
|
5
|
+
13881
|
6
|
+
03017
|
7
|
+
03017
|
8
|
+
03927
|
9
|
+
03927
|
10
|
+
94847
|
11
|
+
94847
|
12
|
+
14734
|
13
|
+
14734
|
14
|
+
53127
|
15
|
+
99999
|
16
|
+
12960
|
17
|
+
12960
|
18
|
+
94789
|
19
|
+
94789
|
20
|
+
23169
|
21
|
+
23169
|
22
|
+
23174
|
23
|
+
23174
|
24
|
+
12815
|
25
|
+
12815
|
26
|
+
12839
|
27
|
+
12839
|
28
|
+
14922
|
29
|
+
14922
|
30
|
+
94846
|
31
|
+
94846
|
32
|
+
13739
|
33
|
+
13739
|
34
|
+
23183
|
35
|
+
23183
|
36
|
+
99999
|
37
|
+
24233
|
38
|
+
24233
|
39
|
+
23234
|
40
|
+
23234
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding:UTF-8
|
3
|
+
|
4
|
+
require 'wukong'
|
5
|
+
require 'pathname'
|
6
|
+
load '/home/dlaw/dev/wukong/examples/wikipedia/munging_utils.rb'
|
7
|
+
|
8
|
+
module WeatherFilter
|
9
|
+
class Mapper < Wukong::Streamer::LineStreamer
|
10
|
+
|
11
|
+
WBAN_FILENAME = '/home/dlaw/dev/wukong/examples/airports/wbans.txt'
|
12
|
+
USA_WBAN_FILENAME = '/home/dlaw/dev/wukong/examples/airports/usa_wbans.txt'
|
13
|
+
FORTY_WBANS_FILENAME = '/home/dlaw/dev/wukong/examples/airports/40_wbans.txt'
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@wbans = []
|
17
|
+
wban_file = File.open(FORTY_WBANS_FILENAME)
|
18
|
+
wban_file.each_line do |line|
|
19
|
+
@wbans << line[0..-2]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def process line
|
24
|
+
MungingUtils.guard_encoding(line) do |clean_line|
|
25
|
+
wban = Pathname(ENV['map_input_file']).basename.to_s.split('-')[1]
|
26
|
+
if @wbans.include? wban
|
27
|
+
yield line
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
Wukong::Script.new(
|
35
|
+
WeatherFilter::Mapper,
|
36
|
+
nil
|
37
|
+
).run
|
@@ -0,0 +1,31 @@
|
|
1
|
+
/* This was a misguided attempt at generating a list of WBAN IDs assigned to airports by filtering the mshr_enhanced
|
2
|
+
* and joining it with isd_stations. This is misguided because mshr_enhanced contains much more data than isd_stations,
|
3
|
+
* and also contains multiple entries for each weather station, making it non-obvious how best to join the data.
|
4
|
+
* A simpler and better approach, taken in usa_wbans.pig and wbans.pig, is to filter and unique mshr_enhanced.
|
5
|
+
*/
|
6
|
+
|
7
|
+
mshr = LOAD '/Users/dlaw/Desktop/stations/mshr_enhanced.tsv' AS
|
8
|
+
(source_id:chararray, source:chararray, begin_date:chararray, end_date:chararray, station_status:chararray,
|
9
|
+
ncdcstn_id:chararray, icao_id:chararray, wban_id:chararray, faa_id:chararray, nwsli_id:chararray, wmo_id:chararray,
|
10
|
+
coop_id:chararray, transmittal_id:chararray, ghcnd_id:chararray, name_principal:chararray, name_principal_short:chararray,
|
11
|
+
name_coop:chararray, name_coop_short:chararray, name_publication:chararray, name_alias:chararray, nws_clim_div:chararray,
|
12
|
+
nws_clim_div_name:chararray, state_prov:chararray, county:chararray, nws_st_code:chararray, fips_country_code:chararray,
|
13
|
+
fips_country_name:chararray, nws_region:chararray, nws_wfo:chararray, elev_ground:chararray, elev_ground_unit:chararray,
|
14
|
+
elev_barom:chararray, elev_barom_unit:chararray, elev_air:chararray, elev_air_unit:chararray, elev_zerodat:chararray,
|
15
|
+
elev_zerodat_unit:chararray, elev_unk:chararray, elev_unk_unit:chararray, lat_dec:chararray, lon_dec:chararray,
|
16
|
+
lat_lon_precision:chararray, relocation:chararray, utc_offset:chararray, obs_env:chararray, platform:chararray);
|
17
|
+
|
18
|
+
mshr_grouped = GROUP mshr BY (icao_id, wban_id, faa_id, begin_date, end_date);
|
19
|
+
mshr_final = FOREACH mshr_grouped GENERATE FLATTEN(group) AS (wban_id, icao_id, faa_id, begin_date, end_date);
|
20
|
+
|
21
|
+
stations = LOAD '/Users/dlaw/Desktop/stations/stations.tsv' AS
|
22
|
+
(usaf_id:chararray, wban_id:chararray, station_name:chararray, wmo_country_id:chararray, fips_country_id:chararray,
|
23
|
+
state:chararray, icao_call_sign:chararray, latitude:chararray, longitude:chararray, elevation:chararray, begin:chararray, end:chararray);
|
24
|
+
|
25
|
+
first_pass_j = JOIN mshr_final BY (wban_id) RIGHT OUTER, stations BY (wban_id);
|
26
|
+
first_pass_f = FILTER first_pass_j BY (mshr_final::icao_id is not null);
|
27
|
+
first_pass = FOREACH first_pass_f GENERATE
|
28
|
+
stations::wban_id, mshr_final::icao_id, stations::icao_call_sign, stations::usaf_id, mshr_final::faa_id,
|
29
|
+
stations::station_name, stations::wmo_country_id, stations::fips_country_id, stations::state, stations::latitude, stations::longitude, stations::elevation, stations::begin, stations::end;
|
30
|
+
|
31
|
+
STORE first_pass INTO '/Users/dlaw/Desktop/stations/airport_stations';
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
load 'flat/lib/flat.rb'
|
3
|
+
|
4
|
+
# This is a script that uses the flat file parser
|
5
|
+
# to transform the mshr enhanced data file and the
|
6
|
+
# ISD stations list from fixed-width to .tsv.
|
7
|
+
# The script must be in the same directory with
|
8
|
+
# mshr_enhanced.txt, isd_stations.txt, and the
|
9
|
+
# flat file parsing library to work.
|
10
|
+
|
11
|
+
# mshr-enhanced format description can be found at
|
12
|
+
# ftp://ftp.ncdc.noaa.gov/pub/data/homr/docs/MSHR_Enhanced_Table.txt
|
13
|
+
|
14
|
+
# The actual mshr-enhanced table can be found at
|
15
|
+
# http://www.ncdc.noaa.gov/homr/file/mshr_enhanced.txt.zip
|
16
|
+
|
17
|
+
# isd_stations can be found at
|
18
|
+
# http://www1.ncdc.noaa.gov/pub/data/noaa/ish-history.txt
|
19
|
+
|
20
|
+
# Format strings
|
21
|
+
MSHR_FORMAT_STRING = %{s20 s10 s8 s8 s20 s20 s20 s20 s20 s20 s20 s20 s20 s20
|
22
|
+
s100 s30 s100 s30 s100 s100 s10 s40 s10 s50 s2 s2 s100
|
23
|
+
s30 s10 s40 s20 s40 s20 s40 s20 s40 s20 s40 s20 s20 s20
|
24
|
+
s10 s62 s16 s40 s100}
|
25
|
+
ISD_FORMAT_STRING = %{s6 s5 s29 s2 s2 s2 s5 D6e3 D7e3 D6e1 _2 s8 s8}
|
26
|
+
|
27
|
+
# Parse mshr_enhanced
|
28
|
+
mshr_parser = Flat.create_parser(MSHR_FORMAT_STRING,1)
|
29
|
+
mshr_parser.file_to_tsv('mshr_enhanced.txt','mshr_enhanced.tsv')
|
30
|
+
|
31
|
+
# Parse isd_stations
|
32
|
+
isd_parser = Flat.create_parser(ISD_FORMAT_STRING,1,false)
|
33
|
+
isd_parser.file_to_tsv('isd_stations.txt','isd_stations.tsv')
|
@@ -0,0 +1,19 @@
|
|
1
|
+
// Outputs a list of WBAN ids that are assigned to airports in the USA
|
2
|
+
|
3
|
+
mshr = LOAD '/Users/dlaw/Desktop/stations/mshr_enhanced.tsv' AS
|
4
|
+
(source_id:chararray, source:chararray, begin_date:chararray, end_date:chararray, station_status:chararray,
|
5
|
+
ncdcstn_id:chararray, icao_id:chararray, wban_id:chararray, faa_id:chararray, nwsli_id:chararray, wmo_id:chararray,
|
6
|
+
coop_id:chararray, transmittal_id:chararray, ghcnd_id:chararray, name_principal:chararray, name_principal_short:chararray,
|
7
|
+
name_coop:chararray, name_coop_short:chararray, name_publication:chararray, name_alias:chararray, nws_clim_div:chararray,
|
8
|
+
nws_clim_div_name:chararray, state_prov:chararray, county:chararray, nws_st_code:chararray, fips_country_code:chararray,
|
9
|
+
fips_country_name:chararray, nws_region:chararray, nws_wfo:chararray, elev_ground:chararray, elev_ground_unit:chararray,
|
10
|
+
elev_barom:chararray, elev_barom_unit:chararray, elev_air:chararray, elev_air_unit:chararray, elev_zerodat:chararray,
|
11
|
+
elev_zerodat_unit:chararray, elev_unk:chararray, elev_unk_unit:chararray, lat_dec:chararray, lon_dec:chararray,
|
12
|
+
lat_lon_precision:chararray, relocation:chararray, utc_offset:chararray, obs_env:chararray, platform:chararray);
|
13
|
+
|
14
|
+
mshr_grouped = GROUP mshr BY (icao_id, wban_id, faa_id, fips_country_code);
|
15
|
+
mshr_flattened = FOREACH mshr_grouped GENERATE FLATTEN(group) AS (wban_id, icao_id, faa_id, fips_country_code);
|
16
|
+
mshr_filtered = FILTER mshr_flattened BY (icao_id is not null and wban_id is not null and fips_country_code == 'US');
|
17
|
+
|
18
|
+
mshr_final = FOREACH mshr_filtered GENERATE wban_id;
|
19
|
+
STORE mshr_final INTO '/Users/dlaw/Desktop/stations/usa_wbans';
|
@@ -0,0 +1,2157 @@
|
|
1
|
+
03069
|
2
|
+
94119
|
3
|
+
04204
|
4
|
+
94991
|
5
|
+
53928
|
6
|
+
54779
|
7
|
+
03196
|
8
|
+
63844
|
9
|
+
63875
|
10
|
+
53929
|
11
|
+
64773
|
12
|
+
04201
|
13
|
+
94076
|
14
|
+
04849
|
15
|
+
63834
|
16
|
+
94037
|
17
|
+
63839
|
18
|
+
63876
|
19
|
+
63877
|
20
|
+
03051
|
21
|
+
63878
|
22
|
+
12981
|
23
|
+
12971
|
24
|
+
53866
|
25
|
+
53904
|
26
|
+
12978
|
27
|
+
53862
|
28
|
+
94061
|
29
|
+
63848
|
30
|
+
63879
|
31
|
+
63847
|
32
|
+
53990
|
33
|
+
53966
|
34
|
+
53972
|
35
|
+
03053
|
36
|
+
94298
|
37
|
+
03032
|
38
|
+
63827
|
39
|
+
92807
|
40
|
+
92807
|
41
|
+
03064
|
42
|
+
93226
|
43
|
+
63880
|
44
|
+
94993
|
45
|
+
53964
|
46
|
+
94623
|
47
|
+
94070
|
48
|
+
94943
|
49
|
+
04862
|
50
|
+
12832
|
51
|
+
03974
|
52
|
+
94299
|
53
|
+
14737
|
54
|
+
13962
|
55
|
+
23050
|
56
|
+
14929
|
57
|
+
14929
|
58
|
+
03019
|
59
|
+
13869
|
60
|
+
04863
|
61
|
+
14756
|
62
|
+
53991
|
63
|
+
54916
|
64
|
+
13959
|
65
|
+
24283
|
66
|
+
93730
|
67
|
+
94997
|
68
|
+
04847
|
69
|
+
53930
|
70
|
+
93940
|
71
|
+
03970
|
72
|
+
03043
|
73
|
+
94998
|
74
|
+
13705
|
75
|
+
03034
|
76
|
+
03064
|
77
|
+
94968
|
78
|
+
93915
|
79
|
+
93065
|
80
|
+
04827
|
81
|
+
04993
|
82
|
+
54770
|
83
|
+
53909
|
84
|
+
14762
|
85
|
+
12804
|
86
|
+
03820
|
87
|
+
13873
|
88
|
+
24044
|
89
|
+
04828
|
90
|
+
04864
|
91
|
+
14930
|
92
|
+
94999
|
93
|
+
53931
|
94
|
+
63853
|
95
|
+
53175
|
96
|
+
53870
|
97
|
+
24015
|
98
|
+
93773
|
99
|
+
93773
|
100
|
+
14813
|
101
|
+
14735
|
102
|
+
12932
|
103
|
+
53146
|
104
|
+
93097
|
105
|
+
03958
|
106
|
+
94910
|
107
|
+
23061
|
108
|
+
24160
|
109
|
+
63833
|
110
|
+
23047
|
111
|
+
23047
|
112
|
+
13870
|
113
|
+
53989
|
114
|
+
54816
|
115
|
+
94989
|
116
|
+
12899
|
117
|
+
13871
|
118
|
+
93846
|
119
|
+
94974
|
120
|
+
14847
|
121
|
+
94975
|
122
|
+
04850
|
123
|
+
14736
|
124
|
+
93067
|
125
|
+
93227
|
126
|
+
12897
|
127
|
+
13701
|
128
|
+
94849
|
129
|
+
04837
|
130
|
+
04837
|
131
|
+
53983
|
132
|
+
54917
|
133
|
+
53932
|
134
|
+
03949
|
135
|
+
54768
|
136
|
+
53915
|
137
|
+
94889
|
138
|
+
93991
|
139
|
+
12953
|
140
|
+
04808
|
141
|
+
94790
|
142
|
+
04865
|
143
|
+
94987
|
144
|
+
53865
|
145
|
+
93073
|
146
|
+
03973
|
147
|
+
54754
|
148
|
+
93796
|
149
|
+
94224
|
150
|
+
54809
|
151
|
+
94929
|
152
|
+
13874
|
153
|
+
03035
|
154
|
+
13958
|
155
|
+
04825
|
156
|
+
94287
|
157
|
+
14946
|
158
|
+
14605
|
159
|
+
04901
|
160
|
+
04902
|
161
|
+
23224
|
162
|
+
03892
|
163
|
+
13904
|
164
|
+
13958
|
165
|
+
14897
|
166
|
+
93797
|
167
|
+
53933
|
168
|
+
03812
|
169
|
+
14777
|
170
|
+
23191
|
171
|
+
04903
|
172
|
+
94190
|
173
|
+
53959
|
174
|
+
04205
|
175
|
+
04904
|
176
|
+
14910
|
177
|
+
63901
|
178
|
+
04779
|
179
|
+
13861
|
180
|
+
53129
|
181
|
+
94815
|
182
|
+
54772
|
183
|
+
93216
|
184
|
+
13944
|
185
|
+
14775
|
186
|
+
13803
|
187
|
+
24119
|
188
|
+
24119
|
189
|
+
54817
|
190
|
+
12971
|
191
|
+
54904
|
192
|
+
93942
|
193
|
+
94946
|
194
|
+
93240
|
195
|
+
53881
|
196
|
+
23159
|
197
|
+
12803
|
198
|
+
94961
|
199
|
+
14816
|
200
|
+
03036
|
201
|
+
14740
|
202
|
+
94702
|
203
|
+
14702
|
204
|
+
94871
|
205
|
+
04751
|
206
|
+
24028
|
207
|
+
24234
|
208
|
+
23155
|
209
|
+
13838
|
210
|
+
04905
|
211
|
+
03024
|
212
|
+
53882
|
213
|
+
04725
|
214
|
+
04725
|
215
|
+
14606
|
216
|
+
23005
|
217
|
+
14616
|
218
|
+
94055
|
219
|
+
13876
|
220
|
+
94289
|
221
|
+
94793
|
222
|
+
94947
|
223
|
+
23157
|
224
|
+
63835
|
225
|
+
24033
|
226
|
+
24011
|
227
|
+
24011
|
228
|
+
04839
|
229
|
+
13820
|
230
|
+
03065
|
231
|
+
93068
|
232
|
+
14958
|
233
|
+
04842
|
234
|
+
53145
|
235
|
+
53988
|
236
|
+
24130
|
237
|
+
23036
|
238
|
+
04853
|
239
|
+
12982
|
240
|
+
13726
|
241
|
+
12818
|
242
|
+
03872
|
243
|
+
94902
|
244
|
+
03859
|
245
|
+
23158
|
246
|
+
24217
|
247
|
+
54760
|
248
|
+
23225
|
249
|
+
13802
|
250
|
+
94046
|
251
|
+
24180
|
252
|
+
03893
|
253
|
+
54831
|
254
|
+
94700
|
255
|
+
03999
|
256
|
+
53823
|
257
|
+
13897
|
258
|
+
25312
|
259
|
+
94185
|
260
|
+
04906
|
261
|
+
24131
|
262
|
+
24267
|
263
|
+
14739
|
264
|
+
12809
|
265
|
+
54765
|
266
|
+
03044
|
267
|
+
24164
|
268
|
+
53918
|
269
|
+
12917
|
270
|
+
53883
|
271
|
+
53992
|
272
|
+
94938
|
273
|
+
14931
|
274
|
+
12919
|
275
|
+
12919
|
276
|
+
13904
|
277
|
+
14815
|
278
|
+
24135
|
279
|
+
64705
|
280
|
+
13970
|
281
|
+
14742
|
282
|
+
14964
|
283
|
+
14733
|
284
|
+
14733
|
285
|
+
23156
|
286
|
+
23152
|
287
|
+
04866
|
288
|
+
93783
|
289
|
+
04813
|
290
|
+
54921
|
291
|
+
03959
|
292
|
+
94282
|
293
|
+
53934
|
294
|
+
54733
|
295
|
+
93943
|
296
|
+
93808
|
297
|
+
93721
|
298
|
+
54922
|
299
|
+
94054
|
300
|
+
13814
|
301
|
+
24133
|
302
|
+
03182
|
303
|
+
92804
|
304
|
+
12981
|
305
|
+
24132
|
306
|
+
04867
|
307
|
+
04839
|
308
|
+
04868
|
309
|
+
14817
|
310
|
+
13883
|
311
|
+
13883
|
312
|
+
24046
|
313
|
+
14895
|
314
|
+
23051
|
315
|
+
14607
|
316
|
+
04907
|
317
|
+
03732
|
318
|
+
04908
|
319
|
+
04909
|
320
|
+
03037
|
321
|
+
13825
|
322
|
+
94625
|
323
|
+
04101
|
324
|
+
53884
|
325
|
+
23254
|
326
|
+
03038
|
327
|
+
54764
|
328
|
+
14966
|
329
|
+
93129
|
330
|
+
94977
|
331
|
+
53916
|
332
|
+
24017
|
333
|
+
23007
|
334
|
+
54743
|
335
|
+
24286
|
336
|
+
14703
|
337
|
+
53850
|
338
|
+
13884
|
339
|
+
93069
|
340
|
+
54901
|
341
|
+
54828
|
342
|
+
93967
|
343
|
+
04805
|
344
|
+
03935
|
345
|
+
94866
|
346
|
+
03914
|
347
|
+
13882
|
348
|
+
53128
|
349
|
+
53935
|
350
|
+
93736
|
351
|
+
13880
|
352
|
+
93203
|
353
|
+
14990
|
354
|
+
04910
|
355
|
+
93809
|
356
|
+
04869
|
357
|
+
93798
|
358
|
+
03802
|
359
|
+
04911
|
360
|
+
03881
|
361
|
+
04912
|
362
|
+
54920
|
363
|
+
03894
|
364
|
+
14820
|
365
|
+
14820
|
366
|
+
54832
|
367
|
+
13999
|
368
|
+
03904
|
369
|
+
94266
|
370
|
+
13881
|
371
|
+
53845
|
372
|
+
23136
|
373
|
+
14821
|
374
|
+
94870
|
375
|
+
14858
|
376
|
+
94940
|
377
|
+
54923
|
378
|
+
04913
|
379
|
+
13984
|
380
|
+
23086
|
381
|
+
93033
|
382
|
+
03179
|
383
|
+
13981
|
384
|
+
93075
|
385
|
+
24045
|
386
|
+
24136
|
387
|
+
12867
|
388
|
+
14745
|
389
|
+
04914
|
390
|
+
93037
|
391
|
+
12947
|
392
|
+
03945
|
393
|
+
13983
|
394
|
+
93799
|
395
|
+
03701
|
396
|
+
24089
|
397
|
+
03960
|
398
|
+
53981
|
399
|
+
03039
|
400
|
+
53936
|
401
|
+
03027
|
402
|
+
54905
|
403
|
+
93134
|
404
|
+
94199
|
405
|
+
94624
|
406
|
+
93718
|
407
|
+
53860
|
408
|
+
12924
|
409
|
+
12924
|
410
|
+
03177
|
411
|
+
53912
|
412
|
+
13866
|
413
|
+
12879
|
414
|
+
93842
|
415
|
+
03932
|
416
|
+
04915
|
417
|
+
03847
|
418
|
+
24137
|
419
|
+
12833
|
420
|
+
03727
|
421
|
+
53867
|
422
|
+
53993
|
423
|
+
63840
|
424
|
+
94032
|
425
|
+
93814
|
426
|
+
23077
|
427
|
+
24202
|
428
|
+
23008
|
429
|
+
04870
|
430
|
+
94890
|
431
|
+
13941
|
432
|
+
94979
|
433
|
+
53902
|
434
|
+
54774
|
435
|
+
14751
|
436
|
+
24018
|
437
|
+
24018
|
438
|
+
94204
|
439
|
+
03164
|
440
|
+
94056
|
441
|
+
93728
|
442
|
+
12834
|
443
|
+
23161
|
444
|
+
13960
|
445
|
+
13728
|
446
|
+
54791
|
447
|
+
93235
|
448
|
+
93815
|
449
|
+
63881
|
450
|
+
94908
|
451
|
+
13743
|
452
|
+
53852
|
453
|
+
13985
|
454
|
+
13985
|
455
|
+
54781
|
456
|
+
03887
|
457
|
+
04916
|
458
|
+
03017
|
459
|
+
23062
|
460
|
+
53925
|
461
|
+
14822
|
462
|
+
94119
|
463
|
+
25515
|
464
|
+
04851
|
465
|
+
03927
|
466
|
+
22015
|
467
|
+
94057
|
468
|
+
13839
|
469
|
+
93843
|
470
|
+
93042
|
471
|
+
04135
|
472
|
+
24012
|
473
|
+
93771
|
474
|
+
04871
|
475
|
+
14747
|
476
|
+
03073
|
477
|
+
22001
|
478
|
+
14913
|
479
|
+
14913
|
480
|
+
54833
|
481
|
+
24138
|
482
|
+
24219
|
483
|
+
23109
|
484
|
+
93784
|
485
|
+
23078
|
486
|
+
03994
|
487
|
+
03724
|
488
|
+
94984
|
489
|
+
63903
|
490
|
+
13837
|
491
|
+
53885
|
492
|
+
04917
|
493
|
+
94891
|
494
|
+
13707
|
495
|
+
93770
|
496
|
+
94878
|
497
|
+
94892
|
498
|
+
24103
|
499
|
+
03702
|
500
|
+
63842
|
501
|
+
03160
|
502
|
+
03976
|
503
|
+
54844
|
504
|
+
93005
|
505
|
+
22010
|
506
|
+
14933
|
507
|
+
94704
|
508
|
+
23162
|
509
|
+
94962
|
510
|
+
53905
|
511
|
+
03991
|
512
|
+
53853
|
513
|
+
94847
|
514
|
+
04830
|
515
|
+
53937
|
516
|
+
53938
|
517
|
+
93026
|
518
|
+
04872
|
519
|
+
04787
|
520
|
+
03070
|
521
|
+
94928
|
522
|
+
94982
|
523
|
+
94982
|
524
|
+
54924
|
525
|
+
03184
|
526
|
+
53910
|
527
|
+
54734
|
528
|
+
04918
|
529
|
+
54786
|
530
|
+
03809
|
531
|
+
13910
|
532
|
+
04919
|
533
|
+
03987
|
534
|
+
53965
|
535
|
+
03049
|
536
|
+
14905
|
537
|
+
94239
|
538
|
+
14991
|
539
|
+
03983
|
540
|
+
03983
|
541
|
+
12983
|
542
|
+
04920
|
543
|
+
13786
|
544
|
+
13787
|
545
|
+
73805
|
546
|
+
23098
|
547
|
+
03703
|
548
|
+
03197
|
549
|
+
23114
|
550
|
+
23179
|
551
|
+
94721
|
552
|
+
94050
|
553
|
+
53864
|
554
|
+
12906
|
555
|
+
54758
|
556
|
+
04873
|
557
|
+
23063
|
558
|
+
03844
|
559
|
+
54838
|
560
|
+
93076
|
561
|
+
63843
|
562
|
+
53886
|
563
|
+
24213
|
564
|
+
04806
|
565
|
+
13729
|
566
|
+
24121
|
567
|
+
63882
|
568
|
+
93992
|
569
|
+
03977
|
570
|
+
14748
|
571
|
+
24220
|
572
|
+
94964
|
573
|
+
23044
|
574
|
+
23154
|
575
|
+
54757
|
576
|
+
24165
|
577
|
+
13989
|
578
|
+
03165
|
579
|
+
03704
|
580
|
+
53112
|
581
|
+
13909
|
582
|
+
53887
|
583
|
+
24193
|
584
|
+
04845
|
585
|
+
54766
|
586
|
+
53876
|
587
|
+
04921
|
588
|
+
53851
|
589
|
+
24141
|
590
|
+
14608
|
591
|
+
03020
|
592
|
+
53872
|
593
|
+
14860
|
594
|
+
25318
|
595
|
+
12961
|
596
|
+
04874
|
597
|
+
14824
|
598
|
+
94853
|
599
|
+
13935
|
600
|
+
03756
|
601
|
+
94971
|
602
|
+
53110
|
603
|
+
04875
|
604
|
+
04922
|
605
|
+
63872
|
606
|
+
24221
|
607
|
+
94195
|
608
|
+
92808
|
609
|
+
04923
|
610
|
+
93817
|
611
|
+
04111
|
612
|
+
53825
|
613
|
+
94726
|
614
|
+
53939
|
615
|
+
93719
|
616
|
+
14734
|
617
|
+
12971
|
618
|
+
53888
|
619
|
+
53842
|
620
|
+
03705
|
621
|
+
12836
|
622
|
+
53114
|
623
|
+
03706
|
624
|
+
53969
|
625
|
+
53907
|
626
|
+
93735
|
627
|
+
93996
|
628
|
+
14914
|
629
|
+
93193
|
630
|
+
93740
|
631
|
+
93737
|
632
|
+
94969
|
633
|
+
24146
|
634
|
+
23167
|
635
|
+
24047
|
636
|
+
94963
|
637
|
+
94015
|
638
|
+
53831
|
639
|
+
13730
|
640
|
+
03981
|
641
|
+
03981
|
642
|
+
03022
|
643
|
+
14825
|
644
|
+
04876
|
645
|
+
04924
|
646
|
+
94006
|
647
|
+
03736
|
648
|
+
53819
|
649
|
+
53819
|
650
|
+
04925
|
651
|
+
94966
|
652
|
+
13840
|
653
|
+
53841
|
654
|
+
03185
|
655
|
+
04926
|
656
|
+
94276
|
657
|
+
03124
|
658
|
+
54792
|
659
|
+
04780
|
660
|
+
04927
|
661
|
+
94868
|
662
|
+
13763
|
663
|
+
54818
|
664
|
+
04840
|
665
|
+
03103
|
666
|
+
12849
|
667
|
+
13744
|
668
|
+
03918
|
669
|
+
13921
|
670
|
+
93733
|
671
|
+
14704
|
672
|
+
23090
|
673
|
+
12835
|
674
|
+
94957
|
675
|
+
94035
|
676
|
+
94062
|
677
|
+
14826
|
678
|
+
53889
|
679
|
+
23256
|
680
|
+
94933
|
681
|
+
13920
|
682
|
+
14719
|
683
|
+
04928
|
684
|
+
04877
|
685
|
+
12895
|
686
|
+
53890
|
687
|
+
54787
|
688
|
+
13947
|
689
|
+
94948
|
690
|
+
14944
|
691
|
+
14944
|
692
|
+
04929
|
693
|
+
13945
|
694
|
+
13964
|
695
|
+
23091
|
696
|
+
04930
|
697
|
+
53113
|
698
|
+
03018
|
699
|
+
13807
|
700
|
+
13961
|
701
|
+
03888
|
702
|
+
03166
|
703
|
+
04836
|
704
|
+
03707
|
705
|
+
14827
|
706
|
+
53891
|
707
|
+
54793
|
708
|
+
03985
|
709
|
+
03985
|
710
|
+
12885
|
711
|
+
03734
|
712
|
+
93993
|
713
|
+
54773
|
714
|
+
03896
|
715
|
+
13975
|
716
|
+
93764
|
717
|
+
12993
|
718
|
+
13940
|
719
|
+
94959
|
720
|
+
03148
|
721
|
+
23168
|
722
|
+
94023
|
723
|
+
23064
|
724
|
+
53940
|
725
|
+
03195
|
726
|
+
04999
|
727
|
+
53977
|
728
|
+
23055
|
729
|
+
24087
|
730
|
+
13764
|
731
|
+
24157
|
732
|
+
53126
|
733
|
+
53892
|
734
|
+
24048
|
735
|
+
53866
|
736
|
+
24112
|
737
|
+
14916
|
738
|
+
14750
|
739
|
+
03901
|
740
|
+
14976
|
741
|
+
94008
|
742
|
+
94008
|
743
|
+
64774
|
744
|
+
04931
|
745
|
+
12876
|
746
|
+
23066
|
747
|
+
03025
|
748
|
+
04843
|
749
|
+
53907
|
750
|
+
23065
|
751
|
+
23065
|
752
|
+
93929
|
753
|
+
13939
|
754
|
+
04854
|
755
|
+
12923
|
756
|
+
53941
|
757
|
+
13886
|
758
|
+
94992
|
759
|
+
03056
|
760
|
+
24142
|
761
|
+
12990
|
762
|
+
94626
|
763
|
+
93057
|
764
|
+
12816
|
765
|
+
53913
|
766
|
+
14707
|
767
|
+
04878
|
768
|
+
24146
|
769
|
+
53984
|
770
|
+
93874
|
771
|
+
94919
|
772
|
+
14898
|
773
|
+
14898
|
774
|
+
53874
|
775
|
+
24201
|
776
|
+
14935
|
777
|
+
03902
|
778
|
+
03992
|
779
|
+
94860
|
780
|
+
94860
|
781
|
+
13713
|
782
|
+
14829
|
783
|
+
13723
|
784
|
+
03870
|
785
|
+
03870
|
786
|
+
14715
|
787
|
+
24143
|
788
|
+
53893
|
789
|
+
53942
|
790
|
+
93007
|
791
|
+
23081
|
792
|
+
94833
|
793
|
+
03030
|
794
|
+
53838
|
795
|
+
13926
|
796
|
+
03929
|
797
|
+
13978
|
798
|
+
03708
|
799
|
+
53837
|
800
|
+
24051
|
801
|
+
53979
|
802
|
+
63889
|
803
|
+
53967
|
804
|
+
04932
|
805
|
+
03186
|
806
|
+
54762
|
807
|
+
04807
|
808
|
+
53820
|
809
|
+
54850
|
810
|
+
53855
|
811
|
+
13833
|
812
|
+
03709
|
813
|
+
93986
|
814
|
+
12994
|
815
|
+
04933
|
816
|
+
04934
|
817
|
+
03908
|
818
|
+
04935
|
819
|
+
94025
|
820
|
+
12962
|
821
|
+
03023
|
822
|
+
03710
|
823
|
+
53894
|
824
|
+
94038
|
825
|
+
63873
|
826
|
+
03961
|
827
|
+
14752
|
828
|
+
93747
|
829
|
+
93706
|
830
|
+
93218
|
831
|
+
03980
|
832
|
+
93046
|
833
|
+
03167
|
834
|
+
94931
|
835
|
+
54728
|
836
|
+
24101
|
837
|
+
94261
|
838
|
+
04998
|
839
|
+
53119
|
840
|
+
53869
|
841
|
+
13927
|
842
|
+
03810
|
843
|
+
93990
|
844
|
+
14894
|
845
|
+
24144
|
846
|
+
03933
|
847
|
+
53895
|
848
|
+
23002
|
849
|
+
94187
|
850
|
+
53896
|
851
|
+
53127
|
852
|
+
04936
|
853
|
+
53111
|
854
|
+
03711
|
855
|
+
93034
|
856
|
+
14936
|
857
|
+
13806
|
858
|
+
03962
|
859
|
+
12918
|
860
|
+
94745
|
861
|
+
94745
|
862
|
+
53839
|
863
|
+
94225
|
864
|
+
63836
|
865
|
+
53970
|
866
|
+
04113
|
867
|
+
03712
|
868
|
+
12904
|
869
|
+
13971
|
870
|
+
03852
|
871
|
+
63852
|
872
|
+
53897
|
873
|
+
93729
|
874
|
+
94949
|
875
|
+
93757
|
876
|
+
12826
|
877
|
+
03856
|
878
|
+
94814
|
879
|
+
64761
|
880
|
+
03860
|
881
|
+
53857
|
882
|
+
63883
|
883
|
+
03868
|
884
|
+
93823
|
885
|
+
14609
|
886
|
+
12927
|
887
|
+
26522
|
888
|
+
13986
|
889
|
+
23170
|
890
|
+
14758
|
891
|
+
94012
|
892
|
+
93228
|
893
|
+
92809
|
894
|
+
54790
|
895
|
+
63837
|
896
|
+
94720
|
897
|
+
12979
|
898
|
+
94973
|
899
|
+
03968
|
900
|
+
04829
|
901
|
+
04997
|
902
|
+
04857
|
903
|
+
53842
|
904
|
+
63884
|
905
|
+
03923
|
906
|
+
93738
|
907
|
+
04724
|
908
|
+
12960
|
909
|
+
94073
|
910
|
+
04937
|
911
|
+
94990
|
912
|
+
03928
|
913
|
+
03928
|
914
|
+
53118
|
915
|
+
24145
|
916
|
+
64706
|
917
|
+
94039
|
918
|
+
53943
|
919
|
+
53135
|
920
|
+
93167
|
921
|
+
04879
|
922
|
+
93785
|
923
|
+
04989
|
924
|
+
53898
|
925
|
+
54767
|
926
|
+
53944
|
927
|
+
04880
|
928
|
+
25626
|
929
|
+
04938
|
930
|
+
03972
|
931
|
+
13781
|
932
|
+
13748
|
933
|
+
13841
|
934
|
+
13841
|
935
|
+
04833
|
936
|
+
04833
|
937
|
+
24091
|
938
|
+
94893
|
939
|
+
93819
|
940
|
+
93819
|
941
|
+
53972
|
942
|
+
23040
|
943
|
+
14918
|
944
|
+
23141
|
945
|
+
93807
|
946
|
+
23194
|
947
|
+
03984
|
948
|
+
14937
|
949
|
+
53899
|
950
|
+
03144
|
951
|
+
14778
|
952
|
+
14938
|
953
|
+
54827
|
954
|
+
92813
|
955
|
+
94014
|
956
|
+
93726
|
957
|
+
04781
|
958
|
+
04881
|
959
|
+
04826
|
960
|
+
94761
|
961
|
+
03026
|
962
|
+
23104
|
963
|
+
23104
|
964
|
+
94926
|
965
|
+
94623
|
966
|
+
12969
|
967
|
+
04844
|
968
|
+
93909
|
969
|
+
93194
|
970
|
+
93244
|
971
|
+
54772
|
972
|
+
24166
|
973
|
+
03940
|
974
|
+
53945
|
975
|
+
13889
|
976
|
+
13889
|
977
|
+
03953
|
978
|
+
13973
|
979
|
+
53978
|
980
|
+
94051
|
981
|
+
03963
|
982
|
+
04110
|
983
|
+
94789
|
984
|
+
03730
|
985
|
+
53824
|
986
|
+
04720
|
987
|
+
63885
|
988
|
+
04939
|
989
|
+
03889
|
990
|
+
03889
|
991
|
+
13987
|
992
|
+
04940
|
993
|
+
14919
|
994
|
+
03713
|
995
|
+
14834
|
996
|
+
63801
|
997
|
+
53971
|
998
|
+
04726
|
999
|
+
53946
|
1000
|
+
94854
|
1001
|
+
53947
|
1002
|
+
53966
|
1003
|
+
53982
|
1004
|
+
14833
|
1005
|
+
54906
|
1006
|
+
63846
|
1007
|
+
04882
|
1008
|
+
03714
|
1009
|
+
14989
|
1010
|
+
25314
|
1011
|
+
24223
|
1012
|
+
53995
|
1013
|
+
03013
|
1014
|
+
14835
|
1015
|
+
12883
|
1016
|
+
93091
|
1017
|
+
14836
|
1018
|
+
24022
|
1019
|
+
23169
|
1020
|
+
03950
|
1021
|
+
23174
|
1022
|
+
23042
|
1023
|
+
23042
|
1024
|
+
54735
|
1025
|
+
24023
|
1026
|
+
23020
|
1027
|
+
53963
|
1028
|
+
13776
|
1029
|
+
12976
|
1030
|
+
54925
|
1031
|
+
03937
|
1032
|
+
03937
|
1033
|
+
54736
|
1034
|
+
13812
|
1035
|
+
04883
|
1036
|
+
94765
|
1037
|
+
12819
|
1038
|
+
94709
|
1039
|
+
93820
|
1040
|
+
13702
|
1041
|
+
93987
|
1042
|
+
13976
|
1043
|
+
14732
|
1044
|
+
23129
|
1045
|
+
03821
|
1046
|
+
24148
|
1047
|
+
94128
|
1048
|
+
53973
|
1049
|
+
53844
|
1050
|
+
03875
|
1051
|
+
23067
|
1052
|
+
03731
|
1053
|
+
93010
|
1054
|
+
13963
|
1055
|
+
53813
|
1056
|
+
53813
|
1057
|
+
14623
|
1058
|
+
04941
|
1059
|
+
03715
|
1060
|
+
94285
|
1061
|
+
04114
|
1062
|
+
53919
|
1063
|
+
94236
|
1064
|
+
53975
|
1065
|
+
24021
|
1066
|
+
14939
|
1067
|
+
14886
|
1068
|
+
04809
|
1069
|
+
63802
|
1070
|
+
14921
|
1071
|
+
54737
|
1072
|
+
94049
|
1073
|
+
24172
|
1074
|
+
64752
|
1075
|
+
53861
|
1076
|
+
04831
|
1077
|
+
04831
|
1078
|
+
13810
|
1079
|
+
03849
|
1080
|
+
23243
|
1081
|
+
04849
|
1082
|
+
12907
|
1083
|
+
03930
|
1084
|
+
04942
|
1085
|
+
93041
|
1086
|
+
04108
|
1087
|
+
14920
|
1088
|
+
13829
|
1089
|
+
23112
|
1090
|
+
03982
|
1091
|
+
03982
|
1092
|
+
13902
|
1093
|
+
93774
|
1094
|
+
53964
|
1095
|
+
23111
|
1096
|
+
93812
|
1097
|
+
04995
|
1098
|
+
12975
|
1099
|
+
23285
|
1100
|
+
24150
|
1101
|
+
04943
|
1102
|
+
23054
|
1103
|
+
53827
|
1104
|
+
54826
|
1105
|
+
53801
|
1106
|
+
03997
|
1107
|
+
94991
|
1108
|
+
94723
|
1109
|
+
24149
|
1110
|
+
24036
|
1111
|
+
13809
|
1112
|
+
93767
|
1113
|
+
04944
|
1114
|
+
14994
|
1115
|
+
53879
|
1116
|
+
93009
|
1117
|
+
13733
|
1118
|
+
54926
|
1119
|
+
03952
|
1120
|
+
03952
|
1121
|
+
63803
|
1122
|
+
63851
|
1123
|
+
93242
|
1124
|
+
23023
|
1125
|
+
23023
|
1126
|
+
03818
|
1127
|
+
03817
|
1128
|
+
94296
|
1129
|
+
94052
|
1130
|
+
94894
|
1131
|
+
14845
|
1132
|
+
94048
|
1133
|
+
93919
|
1134
|
+
23208
|
1135
|
+
54820
|
1136
|
+
23257
|
1137
|
+
12810
|
1138
|
+
03947
|
1139
|
+
94040
|
1140
|
+
03813
|
1141
|
+
12815
|
1142
|
+
14940
|
1143
|
+
03071
|
1144
|
+
93810
|
1145
|
+
63804
|
1146
|
+
14711
|
1147
|
+
14819
|
1148
|
+
54911
|
1149
|
+
93782
|
1150
|
+
24152
|
1151
|
+
13865
|
1152
|
+
13893
|
1153
|
+
23203
|
1154
|
+
53996
|
1155
|
+
14891
|
1156
|
+
12959
|
1157
|
+
94985
|
1158
|
+
24225
|
1159
|
+
03716
|
1160
|
+
13864
|
1161
|
+
04945
|
1162
|
+
04789
|
1163
|
+
13895
|
1164
|
+
04884
|
1165
|
+
53817
|
1166
|
+
13736
|
1167
|
+
53859
|
1168
|
+
94950
|
1169
|
+
03936
|
1170
|
+
23206
|
1171
|
+
24215
|
1172
|
+
14710
|
1173
|
+
03183
|
1174
|
+
93768
|
1175
|
+
12839
|
1176
|
+
94011
|
1177
|
+
94960
|
1178
|
+
94895
|
1179
|
+
13735
|
1180
|
+
94988
|
1181
|
+
04946
|
1182
|
+
13988
|
1183
|
+
14839
|
1184
|
+
14840
|
1185
|
+
63805
|
1186
|
+
03811
|
1187
|
+
53997
|
1188
|
+
93953
|
1189
|
+
14954
|
1190
|
+
04834
|
1191
|
+
12838
|
1192
|
+
12838
|
1193
|
+
93950
|
1194
|
+
24151
|
1195
|
+
04992
|
1196
|
+
23176
|
1197
|
+
14923
|
1198
|
+
63886
|
1199
|
+
24154
|
1200
|
+
24037
|
1201
|
+
14610
|
1202
|
+
13942
|
1203
|
+
03181
|
1204
|
+
54788
|
1205
|
+
94976
|
1206
|
+
94887
|
1207
|
+
03858
|
1208
|
+
54738
|
1209
|
+
94273
|
1210
|
+
03040
|
1211
|
+
94896
|
1212
|
+
04855
|
1213
|
+
13894
|
1214
|
+
13894
|
1215
|
+
23258
|
1216
|
+
04885
|
1217
|
+
24013
|
1218
|
+
26621
|
1219
|
+
04948
|
1220
|
+
54789
|
1221
|
+
94705
|
1222
|
+
94983
|
1223
|
+
04947
|
1224
|
+
04949
|
1225
|
+
14753
|
1226
|
+
13766
|
1227
|
+
94850
|
1228
|
+
94850
|
1229
|
+
13827
|
1230
|
+
13734
|
1231
|
+
93035
|
1232
|
+
93765
|
1233
|
+
54907
|
1234
|
+
63859
|
1235
|
+
53832
|
1236
|
+
23259
|
1237
|
+
13896
|
1238
|
+
14837
|
1239
|
+
24153
|
1240
|
+
14922
|
1241
|
+
94725
|
1242
|
+
54746
|
1243
|
+
04103
|
1244
|
+
12916
|
1245
|
+
14804
|
1246
|
+
12896
|
1247
|
+
93013
|
1248
|
+
93744
|
1249
|
+
53802
|
1250
|
+
54780
|
1251
|
+
63806
|
1252
|
+
94897
|
1253
|
+
04104
|
1254
|
+
54723
|
1255
|
+
24106
|
1256
|
+
04950
|
1257
|
+
93236
|
1258
|
+
04951
|
1259
|
+
54771
|
1260
|
+
93894
|
1261
|
+
94986
|
1262
|
+
94724
|
1263
|
+
03865
|
1264
|
+
94869
|
1265
|
+
24110
|
1266
|
+
63807
|
1267
|
+
93985
|
1268
|
+
04952
|
1269
|
+
14755
|
1270
|
+
63887
|
1271
|
+
93136
|
1272
|
+
53921
|
1273
|
+
13821
|
1274
|
+
04953
|
1275
|
+
53826
|
1276
|
+
03131
|
1277
|
+
94182
|
1278
|
+
03041
|
1279
|
+
13717
|
1280
|
+
93205
|
1281
|
+
04954
|
1282
|
+
94852
|
1283
|
+
93831
|
1284
|
+
93901
|
1285
|
+
12958
|
1286
|
+
14855
|
1287
|
+
93727
|
1288
|
+
53847
|
1289
|
+
14780
|
1290
|
+
63890
|
1291
|
+
53917
|
1292
|
+
13762
|
1293
|
+
03154
|
1294
|
+
53848
|
1295
|
+
93102
|
1296
|
+
13911
|
1297
|
+
12926
|
1298
|
+
13750
|
1299
|
+
12946
|
1300
|
+
23239
|
1301
|
+
13721
|
1302
|
+
14611
|
1303
|
+
93104
|
1304
|
+
93837
|
1305
|
+
12925
|
1306
|
+
93776
|
1307
|
+
23199
|
1308
|
+
93743
|
1309
|
+
53849
|
1310
|
+
13754
|
1311
|
+
03190
|
1312
|
+
53115
|
1313
|
+
93107
|
1314
|
+
23110
|
1315
|
+
03866
|
1316
|
+
12974
|
1317
|
+
24228
|
1318
|
+
03855
|
1319
|
+
93839
|
1320
|
+
93839
|
1321
|
+
12928
|
1322
|
+
12850
|
1323
|
+
94297
|
1324
|
+
03853
|
1325
|
+
23240
|
1326
|
+
93115
|
1327
|
+
93841
|
1328
|
+
93116
|
1329
|
+
93111
|
1330
|
+
93114
|
1331
|
+
13769
|
1332
|
+
93117
|
1333
|
+
03757
|
1334
|
+
23244
|
1335
|
+
24255
|
1336
|
+
12973
|
1337
|
+
93121
|
1338
|
+
14793
|
1339
|
+
94728
|
1340
|
+
13773
|
1341
|
+
03145
|
1342
|
+
93832
|
1343
|
+
93101
|
1344
|
+
14790
|
1345
|
+
93112
|
1346
|
+
94299
|
1347
|
+
93241
|
1348
|
+
93753
|
1349
|
+
23230
|
1350
|
+
93217
|
1351
|
+
94980
|
1352
|
+
12861
|
1353
|
+
53948
|
1354
|
+
03741
|
1355
|
+
03031
|
1356
|
+
94958
|
1357
|
+
04886
|
1358
|
+
54912
|
1359
|
+
14949
|
1360
|
+
14941
|
1361
|
+
93775
|
1362
|
+
94063
|
1363
|
+
53854
|
1364
|
+
24126
|
1365
|
+
26632
|
1366
|
+
53833
|
1367
|
+
03967
|
1368
|
+
53121
|
1369
|
+
13967
|
1370
|
+
54807
|
1371
|
+
53949
|
1372
|
+
03717
|
1373
|
+
94703
|
1374
|
+
14622
|
1375
|
+
94017
|
1376
|
+
24227
|
1377
|
+
03196
|
1378
|
+
94951
|
1379
|
+
63808
|
1380
|
+
53822
|
1381
|
+
04955
|
1382
|
+
14942
|
1383
|
+
03718
|
1384
|
+
94197
|
1385
|
+
92822
|
1386
|
+
04956
|
1387
|
+
04957
|
1388
|
+
93040
|
1389
|
+
24162
|
1390
|
+
24285
|
1391
|
+
03102
|
1392
|
+
03737
|
1393
|
+
54819
|
1394
|
+
54919
|
1395
|
+
12882
|
1396
|
+
63809
|
1397
|
+
53868
|
1398
|
+
54752
|
1399
|
+
04958
|
1400
|
+
04959
|
1401
|
+
94846
|
1402
|
+
54756
|
1403
|
+
13737
|
1404
|
+
53998
|
1405
|
+
94746
|
1406
|
+
12841
|
1407
|
+
04224
|
1408
|
+
53962
|
1409
|
+
14808
|
1410
|
+
94855
|
1411
|
+
04804
|
1412
|
+
94927
|
1413
|
+
24284
|
1414
|
+
14950
|
1415
|
+
04106
|
1416
|
+
03948
|
1417
|
+
93210
|
1418
|
+
04960
|
1419
|
+
94994
|
1420
|
+
04961
|
1421
|
+
53803
|
1422
|
+
54704
|
1423
|
+
93786
|
1424
|
+
64707
|
1425
|
+
93110
|
1426
|
+
04962
|
1427
|
+
03850
|
1428
|
+
04887
|
1429
|
+
03957
|
1430
|
+
03163
|
1431
|
+
54813
|
1432
|
+
94898
|
1433
|
+
94899
|
1434
|
+
94173
|
1435
|
+
03170
|
1436
|
+
04109
|
1437
|
+
04856
|
1438
|
+
12968
|
1439
|
+
24222
|
1440
|
+
03816
|
1441
|
+
03816
|
1442
|
+
13846
|
1443
|
+
23289
|
1444
|
+
27506
|
1445
|
+
93988
|
1446
|
+
04742
|
1447
|
+
64776
|
1448
|
+
54913
|
1449
|
+
12844
|
1450
|
+
04832
|
1451
|
+
92824
|
1452
|
+
54852
|
1453
|
+
04963
|
1454
|
+
53863
|
1455
|
+
24155
|
1456
|
+
24155
|
1457
|
+
24229
|
1458
|
+
04964
|
1459
|
+
54778
|
1460
|
+
03058
|
1461
|
+
54927
|
1462
|
+
03882
|
1463
|
+
03162
|
1464
|
+
12812
|
1465
|
+
13783
|
1466
|
+
04852
|
1467
|
+
93741
|
1468
|
+
13739
|
1469
|
+
04888
|
1470
|
+
24024
|
1471
|
+
23183
|
1472
|
+
14842
|
1473
|
+
53808
|
1474
|
+
12873
|
1475
|
+
24156
|
1476
|
+
12957
|
1477
|
+
24025
|
1478
|
+
94823
|
1479
|
+
03804
|
1480
|
+
94967
|
1481
|
+
14962
|
1482
|
+
12986
|
1483
|
+
94733
|
1484
|
+
14841
|
1485
|
+
23182
|
1486
|
+
25625
|
1487
|
+
92805
|
1488
|
+
94086
|
1489
|
+
13969
|
1490
|
+
94732
|
1491
|
+
54914
|
1492
|
+
13899
|
1493
|
+
04889
|
1494
|
+
13923
|
1495
|
+
13714
|
1496
|
+
03180
|
1497
|
+
03931
|
1498
|
+
03993
|
1499
|
+
03975
|
1500
|
+
14757
|
1501
|
+
03052
|
1502
|
+
03998
|
1503
|
+
53950
|
1504
|
+
14604
|
1505
|
+
53858
|
1506
|
+
04965
|
1507
|
+
93209
|
1508
|
+
23184
|
1509
|
+
63810
|
1510
|
+
63874
|
1511
|
+
25330
|
1512
|
+
93955
|
1513
|
+
14761
|
1514
|
+
24163
|
1515
|
+
14763
|
1516
|
+
13868
|
1517
|
+
04743
|
1518
|
+
93983
|
1519
|
+
93138
|
1520
|
+
12935
|
1521
|
+
93714
|
1522
|
+
26526
|
1523
|
+
94817
|
1524
|
+
12936
|
1525
|
+
93978
|
1526
|
+
23149
|
1527
|
+
54782
|
1528
|
+
93058
|
1529
|
+
93141
|
1530
|
+
94129
|
1531
|
+
03021
|
1532
|
+
64708
|
1533
|
+
14765
|
1534
|
+
53951
|
1535
|
+
24174
|
1536
|
+
23097
|
1537
|
+
03954
|
1538
|
+
54915
|
1539
|
+
53952
|
1540
|
+
04838
|
1541
|
+
14764
|
1542
|
+
94263
|
1543
|
+
54769
|
1544
|
+
03045
|
1545
|
+
54825
|
1546
|
+
04134
|
1547
|
+
94818
|
1548
|
+
03171
|
1549
|
+
14806
|
1550
|
+
24090
|
1551
|
+
12995
|
1552
|
+
93772
|
1553
|
+
03971
|
1554
|
+
24231
|
1555
|
+
24216
|
1556
|
+
12984
|
1557
|
+
24006
|
1558
|
+
54928
|
1559
|
+
03738
|
1560
|
+
24257
|
1561
|
+
14712
|
1562
|
+
14767
|
1563
|
+
04966
|
1564
|
+
24230
|
1565
|
+
94925
|
1566
|
+
13722
|
1567
|
+
23021
|
1568
|
+
94022
|
1569
|
+
94107
|
1570
|
+
94822
|
1571
|
+
04967
|
1572
|
+
53104
|
1573
|
+
04803
|
1574
|
+
63811
|
1575
|
+
93232
|
1576
|
+
13740
|
1577
|
+
03846
|
1578
|
+
03016
|
1579
|
+
23069
|
1580
|
+
23119
|
1581
|
+
24061
|
1582
|
+
24061
|
1583
|
+
94601
|
1584
|
+
12972
|
1585
|
+
53953
|
1586
|
+
24027
|
1587
|
+
53834
|
1588
|
+
14717
|
1589
|
+
64775
|
1590
|
+
93801
|
1591
|
+
03735
|
1592
|
+
54821
|
1593
|
+
12911
|
1594
|
+
04968
|
1595
|
+
23043
|
1596
|
+
53120
|
1597
|
+
23185
|
1598
|
+
54824
|
1599
|
+
94248
|
1600
|
+
13741
|
1601
|
+
14768
|
1602
|
+
53954
|
1603
|
+
04969
|
1604
|
+
23009
|
1605
|
+
04970
|
1606
|
+
54909
|
1607
|
+
53965
|
1608
|
+
04890
|
1609
|
+
14864
|
1610
|
+
03029
|
1611
|
+
53999
|
1612
|
+
92802
|
1613
|
+
04891
|
1614
|
+
04971
|
1615
|
+
93997
|
1616
|
+
53958
|
1617
|
+
14925
|
1618
|
+
63841
|
1619
|
+
12894
|
1620
|
+
23052
|
1621
|
+
94288
|
1622
|
+
53920
|
1623
|
+
63812
|
1624
|
+
94737
|
1625
|
+
53908
|
1626
|
+
14992
|
1627
|
+
93759
|
1628
|
+
24057
|
1629
|
+
23901
|
1630
|
+
94194
|
1631
|
+
54834
|
1632
|
+
63813
|
1633
|
+
04972
|
1634
|
+
93781
|
1635
|
+
04113
|
1636
|
+
23232
|
1637
|
+
93084
|
1638
|
+
23049
|
1639
|
+
23188
|
1640
|
+
63814
|
1641
|
+
12921
|
1642
|
+
03822
|
1643
|
+
94836
|
1644
|
+
54910
|
1645
|
+
23190
|
1646
|
+
23122
|
1647
|
+
04841
|
1648
|
+
14848
|
1649
|
+
93206
|
1650
|
+
94033
|
1651
|
+
93720
|
1652
|
+
04741
|
1653
|
+
23237
|
1654
|
+
04973
|
1655
|
+
23187
|
1656
|
+
93821
|
1657
|
+
03192
|
1658
|
+
03178
|
1659
|
+
94028
|
1660
|
+
24233
|
1661
|
+
03172
|
1662
|
+
53143
|
1663
|
+
14770
|
1664
|
+
03969
|
1665
|
+
53904
|
1666
|
+
94290
|
1667
|
+
12854
|
1668
|
+
94990
|
1669
|
+
94176
|
1670
|
+
64709
|
1671
|
+
23234
|
1672
|
+
03719
|
1673
|
+
04107
|
1674
|
+
04996
|
1675
|
+
64710
|
1676
|
+
13995
|
1677
|
+
13995
|
1678
|
+
63888
|
1679
|
+
92814
|
1680
|
+
12977
|
1681
|
+
04974
|
1682
|
+
13925
|
1683
|
+
23186
|
1684
|
+
93760
|
1685
|
+
04975
|
1686
|
+
94227
|
1687
|
+
24029
|
1688
|
+
13957
|
1689
|
+
13957
|
1690
|
+
03763
|
1691
|
+
24259
|
1692
|
+
23293
|
1693
|
+
23293
|
1694
|
+
93027
|
1695
|
+
23034
|
1696
|
+
23034
|
1697
|
+
04892
|
1698
|
+
24114
|
1699
|
+
12909
|
1700
|
+
03012
|
1701
|
+
14846
|
1702
|
+
04976
|
1703
|
+
24127
|
1704
|
+
24232
|
1705
|
+
53955
|
1706
|
+
04893
|
1707
|
+
53141
|
1708
|
+
94740
|
1709
|
+
03919
|
1710
|
+
93998
|
1711
|
+
03879
|
1712
|
+
93937
|
1713
|
+
63815
|
1714
|
+
93225
|
1715
|
+
24196
|
1716
|
+
93197
|
1717
|
+
24237
|
1718
|
+
54785
|
1719
|
+
23273
|
1720
|
+
93184
|
1721
|
+
03050
|
1722
|
+
93911
|
1723
|
+
23233
|
1724
|
+
04112
|
1725
|
+
24030
|
1726
|
+
03059
|
1727
|
+
03720
|
1728
|
+
03101
|
1729
|
+
53117
|
1730
|
+
93804
|
1731
|
+
04201
|
1732
|
+
03028
|
1733
|
+
92806
|
1734
|
+
93822
|
1735
|
+
13966
|
1736
|
+
14972
|
1737
|
+
04894
|
1738
|
+
93231
|
1739
|
+
53985
|
1740
|
+
23902
|
1741
|
+
12871
|
1742
|
+
93083
|
1743
|
+
53906
|
1744
|
+
13849
|
1745
|
+
12970
|
1746
|
+
13878
|
1747
|
+
14847
|
1748
|
+
14926
|
1749
|
+
04895
|
1750
|
+
13993
|
1751
|
+
13994
|
1752
|
+
14927
|
1753
|
+
23213
|
1754
|
+
23274
|
1755
|
+
92815
|
1756
|
+
04824
|
1757
|
+
94161
|
1758
|
+
03966
|
1759
|
+
03721
|
1760
|
+
23202
|
1761
|
+
54908
|
1762
|
+
14943
|
1763
|
+
93063
|
1764
|
+
24258
|
1765
|
+
63816
|
1766
|
+
13824
|
1767
|
+
14714
|
1768
|
+
03965
|
1769
|
+
23033
|
1770
|
+
24235
|
1771
|
+
54930
|
1772
|
+
14771
|
1773
|
+
13930
|
1774
|
+
04129
|
1775
|
+
12975
|
1776
|
+
12957
|
1777
|
+
03044
|
1778
|
+
12984
|
1779
|
+
12980
|
1780
|
+
23070
|
1781
|
+
54777
|
1782
|
+
63817
|
1783
|
+
03938
|
1784
|
+
63818
|
1785
|
+
92801
|
1786
|
+
23048
|
1787
|
+
93806
|
1788
|
+
24207
|
1789
|
+
93045
|
1790
|
+
03722
|
1791
|
+
24241
|
1792
|
+
04848
|
1793
|
+
94741
|
1794
|
+
54822
|
1795
|
+
03011
|
1796
|
+
04102
|
1797
|
+
93778
|
1798
|
+
94087
|
1799
|
+
13919
|
1800
|
+
04896
|
1801
|
+
94274
|
1802
|
+
12898
|
1803
|
+
54931
|
1804
|
+
53914
|
1805
|
+
54953
|
1806
|
+
93805
|
1807
|
+
93805
|
1808
|
+
03979
|
1809
|
+
12888
|
1810
|
+
63819
|
1811
|
+
04977
|
1812
|
+
03191
|
1813
|
+
03122
|
1814
|
+
04978
|
1815
|
+
03878
|
1816
|
+
94830
|
1817
|
+
13996
|
1818
|
+
94053
|
1819
|
+
12842
|
1820
|
+
92825
|
1821
|
+
23153
|
1822
|
+
93984
|
1823
|
+
94978
|
1824
|
+
53956
|
1825
|
+
13877
|
1826
|
+
93201
|
1827
|
+
53911
|
1828
|
+
03104
|
1829
|
+
03723
|
1830
|
+
24242
|
1831
|
+
54823
|
1832
|
+
14792
|
1833
|
+
12886
|
1834
|
+
13968
|
1835
|
+
73804
|
1836
|
+
93862
|
1837
|
+
23160
|
1838
|
+
14850
|
1839
|
+
94956
|
1840
|
+
93230
|
1841
|
+
03996
|
1842
|
+
94178
|
1843
|
+
04979
|
1844
|
+
03986
|
1845
|
+
13977
|
1846
|
+
13972
|
1847
|
+
13891
|
1848
|
+
54776
|
1849
|
+
63825
|
1850
|
+
94194
|
1851
|
+
04114
|
1852
|
+
04116
|
1853
|
+
04110
|
1854
|
+
94184
|
1855
|
+
94281
|
1856
|
+
94794
|
1857
|
+
63820
|
1858
|
+
03742
|
1859
|
+
94047
|
1860
|
+
04897
|
1861
|
+
94981
|
1862
|
+
14880
|
1863
|
+
94240
|
1864
|
+
93989
|
1865
|
+
63821
|
1866
|
+
23275
|
1867
|
+
64753
|
1868
|
+
04980
|
1869
|
+
03946
|
1870
|
+
53901
|
1871
|
+
04898
|
1872
|
+
54739
|
1873
|
+
53806
|
1874
|
+
23903
|
1875
|
+
53903
|
1876
|
+
14787
|
1877
|
+
12985
|
1878
|
+
53871
|
1879
|
+
13857
|
1880
|
+
53856
|
1881
|
+
93780
|
1882
|
+
93214
|
1883
|
+
03978
|
1884
|
+
93234
|
1885
|
+
93241
|
1886
|
+
12912
|
1887
|
+
23131
|
1888
|
+
92816
|
1889
|
+
63822
|
1890
|
+
94030
|
1891
|
+
53123
|
1892
|
+
13997
|
1893
|
+
93144
|
1894
|
+
53818
|
1895
|
+
93999
|
1896
|
+
03838
|
1897
|
+
93845
|
1898
|
+
54829
|
1899
|
+
03995
|
1900
|
+
23130
|
1901
|
+
94930
|
1902
|
+
53873
|
1903
|
+
13858
|
1904
|
+
04846
|
1905
|
+
63823
|
1906
|
+
12843
|
1907
|
+
54740
|
1908
|
+
04858
|
1909
|
+
04981
|
1910
|
+
24032
|
1911
|
+
03042
|
1912
|
+
53101
|
1913
|
+
63824
|
1914
|
+
94298
|
1915
|
+
92817
|
1916
|
+
93795
|
1917
|
+
04982
|
1918
|
+
04983
|
1919
|
+
63845
|
1920
|
+
04899
|
1921
|
+
63832
|
1922
|
+
04221
|
1923
|
+
93775
|
1924
|
+
03725
|
1925
|
+
26618
|
1926
|
+
93739
|
1927
|
+
53986
|
1928
|
+
03832
|
1929
|
+
24198
|
1930
|
+
53130
|
1931
|
+
03159
|
1932
|
+
13932
|
1933
|
+
24128
|
1934
|
+
13860
|
1935
|
+
14706
|
1936
|
+
24062
|
1937
|
+
14794
|
1938
|
+
23277
|
1939
|
+
14615
|
1940
|
+
03726
|
1941
|
+
53957
|
1942
|
+
94163
|
1943
|
+
92802
|
1944
|
+
53976
|
1945
|
+
12868
|
1946
|
+
53922
|
1947
|
+
04984
|
1948
|
+
14853
|
1949
|
+
24243
|
1950
|
+
94911
|
1951
|
+
14852
|
1952
|
+
23195
|
1953
|
+
53116
|
1954
|
+
93044
|
1955
|
+
93824
|
1956
|
+
25708
|
1957
|
+
25715
|
1958
|
+
25348
|
1959
|
+
25375
|
1960
|
+
25331
|
1961
|
+
27401
|
1962
|
+
26615
|
1963
|
+
26415
|
1964
|
+
26645
|
1965
|
+
46402
|
1966
|
+
27502
|
1967
|
+
26533
|
1968
|
+
26497
|
1969
|
+
25316
|
1970
|
+
25624
|
1971
|
+
26418
|
1972
|
+
25361
|
1973
|
+
26410
|
1974
|
+
26445
|
1975
|
+
26633
|
1976
|
+
26646
|
1977
|
+
26643
|
1978
|
+
26649
|
1979
|
+
25704
|
1980
|
+
25513
|
1981
|
+
25501
|
1982
|
+
26486
|
1983
|
+
25616
|
1984
|
+
26641
|
1985
|
+
96401
|
1986
|
+
26401
|
1987
|
+
26422
|
1988
|
+
25623
|
1989
|
+
26407
|
1990
|
+
25357
|
1991
|
+
26650
|
1992
|
+
26650
|
1993
|
+
26523
|
1994
|
+
26554
|
1995
|
+
26411
|
1996
|
+
26498
|
1997
|
+
25369
|
1998
|
+
26555
|
1999
|
+
26551
|
2000
|
+
26519
|
2001
|
+
26501
|
2002
|
+
26501
|
2003
|
+
26509
|
2004
|
+
26465
|
2005
|
+
26513
|
2006
|
+
26425
|
2007
|
+
26628
|
2008
|
+
26703
|
2009
|
+
25310
|
2010
|
+
25322
|
2011
|
+
25335
|
2012
|
+
26521
|
2013
|
+
26548
|
2014
|
+
26548
|
2015
|
+
26552
|
2016
|
+
25323
|
2017
|
+
25507
|
2018
|
+
26651
|
2019
|
+
26522
|
2020
|
+
26499
|
2021
|
+
25376
|
2022
|
+
25521
|
2023
|
+
25404
|
2024
|
+
25519
|
2025
|
+
25506
|
2026
|
+
26535
|
2027
|
+
46403
|
2028
|
+
25518
|
2029
|
+
25309
|
2030
|
+
96402
|
2031
|
+
25503
|
2032
|
+
26602
|
2033
|
+
25503
|
2034
|
+
26542
|
2035
|
+
25325
|
2036
|
+
27408
|
2037
|
+
26502
|
2038
|
+
25367
|
2039
|
+
26652
|
2040
|
+
26491
|
2041
|
+
26546
|
2042
|
+
27517
|
2043
|
+
26480
|
2044
|
+
26631
|
2045
|
+
26557
|
2046
|
+
26510
|
2047
|
+
25402
|
2048
|
+
25403
|
2049
|
+
26512
|
2050
|
+
26524
|
2051
|
+
25377
|
2052
|
+
26621
|
2053
|
+
26635
|
2054
|
+
26409
|
2055
|
+
46404
|
2056
|
+
26622
|
2057
|
+
26451
|
2058
|
+
26516
|
2059
|
+
26435
|
2060
|
+
25308
|
2061
|
+
26644
|
2062
|
+
25378
|
2063
|
+
26617
|
2064
|
+
26653
|
2065
|
+
26412
|
2066
|
+
26616
|
2067
|
+
25628
|
2068
|
+
26639
|
2069
|
+
24690
|
2070
|
+
25329
|
2071
|
+
25508
|
2072
|
+
25604
|
2073
|
+
25613
|
2074
|
+
26623
|
2075
|
+
27515
|
2076
|
+
46405
|
2077
|
+
26654
|
2078
|
+
26561
|
2079
|
+
26704
|
2080
|
+
27406
|
2081
|
+
25617
|
2082
|
+
26625
|
2083
|
+
25333
|
2084
|
+
26558
|
2085
|
+
26553
|
2086
|
+
26647
|
2087
|
+
25713
|
2088
|
+
25516
|
2089
|
+
26439
|
2090
|
+
25341
|
2091
|
+
26414
|
2092
|
+
26534
|
2093
|
+
26514
|
2094
|
+
26559
|
2095
|
+
45715
|
2096
|
+
26529
|
2097
|
+
26634
|
2098
|
+
25629
|
2099
|
+
26528
|
2100
|
+
26536
|
2101
|
+
26492
|
2102
|
+
26492
|
2103
|
+
27518
|
2104
|
+
46406
|
2105
|
+
26508
|
2106
|
+
26627
|
2107
|
+
26560
|
2108
|
+
26442
|
2109
|
+
26479
|
2110
|
+
26642
|
2111
|
+
26442
|
2112
|
+
26438
|
2113
|
+
25338
|
2114
|
+
27503
|
2115
|
+
27503
|
2116
|
+
26630
|
2117
|
+
26648
|
2118
|
+
26444
|
2119
|
+
26443
|
2120
|
+
26445
|
2121
|
+
26484
|
2122
|
+
25339
|
2123
|
+
46407
|
2124
|
+
26413
|
2125
|
+
22501
|
2126
|
+
22508
|
2127
|
+
22552
|
2128
|
+
22551
|
2129
|
+
22548
|
2130
|
+
22550
|
2131
|
+
21510
|
2132
|
+
22536
|
2133
|
+
22534
|
2134
|
+
22547
|
2135
|
+
22539
|
2136
|
+
22514
|
2137
|
+
22519
|
2138
|
+
22521
|
2139
|
+
22517
|
2140
|
+
22524
|
2141
|
+
22516
|
2142
|
+
22526
|
2143
|
+
21508
|
2144
|
+
21504
|
2145
|
+
22513
|
2146
|
+
27403
|
2147
|
+
26624
|
2148
|
+
26638
|
2149
|
+
11640
|
2150
|
+
11624
|
2151
|
+
11603
|
2152
|
+
11653
|
2153
|
+
11630
|
2154
|
+
11630
|
2155
|
+
11641
|
2156
|
+
11655
|
2157
|
+
11649
|